Problem z kompilacj

Potrzebujesz pomocy z C, C++, perl, python, itp.
macylapka
Posty: 85
Rejestracja: 11 czerwca 2007, 16:16
Lokalizacja: Bielsko-Bia³a

Problem z kompilacją...

Post autor: macylapka »

Koledzy mam problemy z książkowym przykładem, może mi ktoś pomuc i wyjaśnić gdzie jest błąd ? Oto kody :

printBinary.h

Kod: Zaznacz cały

void printBinary(const unsigned char val); 
printBinary.cpp

Kod: Zaznacz cały

#include <iostream>

void printBinary(const unsigned char val) {
 for(int i=7;i>=0;i--)
   if(val & (1<<i))
     std::cout <<"1";
   else
     std::cout <<"0";
}
Bitwise.cpp

Kod: Zaznacz cały

#include <iostream>
#include "printBinary.h"

using namespace std;

#define PR(STR, EXPR) \
 cout<< STR; printBinary(EXPR); cout<<endl;

int main() {
unsigned int getval;
unsigned char a,b;
cout << "Wprowadz liczbe z zakresu od 0 do 255: ";
cin>>getval; a=getval;
PR("a w zapisie dwojkowym: ", a);
cout << "Wprowadz liczbe z zakresu od 0 do 255: ";
cin>>getval; b=getval;
PR("b w zapisie dwojkowym: ", b);
PR("a | b = ", a | b);
PR("a & b = ", a & b);
PR("a ^ b = ", a ^ b);
PR("~a = ", ~a);
PR("~a = ", ~b);
unsigned char c = 0x5A;
PR("c w zapisie dwojkowym: ",c);
a|=c;
PR("a |= c; a= ",a);
a&=c;
PR("b &= c; b= ",b);
a^=c;
PR("b ^= a; b= ",b);
}
Podczas kompilacji wyświetla takie problemy :

Kod: Zaznacz cały

/tmp/cctxJacm.o: In function `main':
Bitwise.cpp :( .text+0xab): undefined reference to `printBinary(unsigned char)'
Bitwise.cpp :( .text+0xf5): undefined reference to `printBinary(unsigned char)'
Bitwise.cpp :( .text+0x122): undefined reference to `printBinary(unsigned char)'
Bitwise.cpp :( .text+0x14f): undefined reference to `printBinary(unsigned char)'
Bitwise.cpp :( .text+0x17c): undefined reference to `printBinary(unsigned char)'
/tmp/cctxJacm.o:Bitwise.cpp :( .text+0x1a8): more undefined references to `printBinary(unsigned char)' follow
collect2: ld returned 1 exit status
ponton
Beginner
Posty: 406
Rejestracja: 24 stycznia 2007, 01:40
Lokalizacja: Kalisz/Wroc³aw

Post autor: ponton »

może mi ktoś pomuc
pomÓc!

Błędów w przykładach nie ma. Błędów podczas kompilacji też nie ma. Błędy są podczas linkowania, bo nie linkujesz tych dwóch plików razem.
elwis
Beginner
Posty: 108
Rejestracja: 08 lutego 2007, 18:36
Lokalizacja: Gdañsk

Post autor: elwis »

istotnie błędy tu wyrzuca linker. Spróbuj skompilować tak:

Kod: Zaznacz cały

g++ -c printBinary.cpp - o printBinary.o
g++ -c Bitwise.cpp -o Bitwise.o
g++ printBinary.o Bitwise.o -o bitwise
macylapka
Posty: 85
Rejestracja: 11 czerwca 2007, 16:16
Lokalizacja: Bielsko-Bia³a

Post autor: macylapka »

elwis napisał/ła
istotnie błędy tu wyrzuca linker. Spróbuj skompilować tak:
Kod:
g++ -c printBinary.cpp - o printBinary.o
g++ -c Bitwise.cpp -o Bitwise.o
g++ printBinary.o Bitwise.o -o bitwise
Nie udaje sie skompilować tej 3 linijki :

Kod: Zaznacz cały

g++ printBinary.o Bitwise.o -o bitwise
W 2-óch pierwszych przypadkach kopilatro wykonuje pliki *.o
a w 3 ciej:

Kod: Zaznacz cały

linker input file unused because linking not done
g++: Bitwise.o: linker input file unused because linking not done
ponton napisał/ła
Cytat:
może mi ktoś pomuc

pomÓc!
O ile mi wiadomo to jest FORUM o tematyce informatycznej a nie humanistycznej a tym bardziej o ortografi jezyka polskiego. Kolego jezeli nie możesz POMÓC w kąkretny sposób to chociaż nie przeszkadzaj.

Nie zaóważyłem i pomiędzy g++ a printBinary wpisałem -c którego tam nie miałobyć :P. Wiec wszystkie komedny do linkera są poprawne :D . Co do tego łączenia to jak to działa z tymi plikami ? Jak plik z nagłówkiem .h "heater ?" łączy sie z dwoma plikami *.cpp ? I jak te pliki są wykorzystywane w tym programie ?
elwis
Beginner
Posty: 108
Rejestracja: 08 lutego 2007, 18:36
Lokalizacja: Gdañsk

Post autor: elwis »

heh.. O takie podstawy się pytasz? Powinno być w książce ;p. To polega na tym, że plik cpp ładuje nagłówki( ang. headers), żeby wiedzieć, co może odpalić znajdującego się w innych plikach cpp. Po kompilacji pliku cpp powstaje półprodukt i dopiero linkując, czyli łącząc składowe półprodukty powstaje binarka.. Ewentualnie możesz do mnie napisać, to ci mogę ci trochę pomóc trochę prywatnie, bo nie ma sensu tak bezszczelnie forum zaśmiecać ;p
Edit:
Zrobiłem błąd w pierwszej linijce. Nie ma być spacji między '-', a 'o'. Jeśli tego nie wyłapałeś, popraw, bo u mnie kompiluje dobrze...
Rad
Member
Posty: 1208
Rejestracja: 28 czerwca 2006, 15:05

Post autor: Rad »

Ale kombinujecie :) Jak są dwa źródłowe, to wystarczy dać:

Kod: Zaznacz cały

g++ jeden.cpp drugi.cpp -o program
Czyli w tym przypadku:

Kod: Zaznacz cały

g++ printBinary.cpp Bitwise.cpp -o wynik
ponton
Beginner
Posty: 406
Rejestracja: 24 stycznia 2007, 01:40
Lokalizacja: Kalisz/Wroc³aw

Post autor: ponton »

w kąkretny sposób to chociaż nie przeszkadzaj.
kONkretny
O ile mi wiadomo to jest FORUM o tematyce informatycznej a nie humanistycznej a tym bardziej o ortografi jezyka polskiego.
Język polski jest językiem używanym na tym forum, więc pisz w nim poprawnie. Pisząc z błędami okazujesz nam brak szacunku. I nie to nic wspólnej z humanizmem.

Poza tym łamiesz regulamin:
Regulamin pisze: 4. d) na forum należy pisać poprawnie, bez błędów ortograficznych i interpunkcyjnych, jeżeli masz z tym problemy, to skorzystaj z przycisku "pisownia" przed wysłaniem posta]
ODPOWIEDZ