|
Problem z kompilacją...
macylapka - 24-08-2007 07:47
Koledzy mam problemy z książkowym przykładem, może mi ktoś pomuc i wyjaśnić gdzie jest błąd ? Oto kody :
printBinary.h void printBinary(const unsigned char val);
printBinary.cpp #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 #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 : /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 - 24-08-2007 07:56
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 - 24-08-2007 08:18
istotnie błędy tu wyrzuca linker. Spróbuj skompilować tak: g++ -c printBinary.cpp - o printBinary.o g++ -c Bitwise.cpp -o Bitwise.o g++ printBinary.o Bitwise.o -o bitwise
macylapka - 24-08-2007 10:18
elwis napisał/ła Nie udaje sie skompilować tej 3 linijki : g++ printBinary.o Bitwise.o -o bitwise
W 2-óch pierwszych przypadkach kopilatro wykonuje pliki *.o a w 3 ciej:
linker input file unused because linking not done g++: Bitwise.o: linker input file unused because linking not done
ponton napisał/ła 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 - 24-08-2007 10:51
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 - 24-08-2007 14:20
Ale kombinujecie :) Jak są dwa źródłowe, to wystarczy dać: g++ jeden.cpp drugi.cpp -o program
Czyli w tym przypadku: g++ printBinary.cpp Bitwise.cpp -o wynik
ponton - 24-08-2007 16:55
kONkretny
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:
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; posty z dużą ilością błędów będą poprawiane lub usuwane.
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|