Błąd linkera "undefined reference to"

0

Witam. Piszę program do obsługi GPS, potrzebuję klasę do "tłumaczenia" protokołu NMEA, ale to jest najmniej ważne.

Oto mój kod:

NMEAClass.h:

// ciach.. i tak byl nie wazny - q

wyniki kompilacji:

g++ nmea1.cpp -o nmea1 -Wall -ansi -pedantic
/tmp/ccQJ6Fwv.o: In function `main':
nmea1.cpp:(.text+0xbd): undefined reference to `NMEAClass::NMEAClass(char const*, bool)'
nmea1.cpp:(.text+0xf2): undefined reference to `NMEAClass::LiczbaInstrukcji()'
nmea1.cpp:(.text+0x14a): undefined reference to `NMEAClass::Instrukcja(int)'
nmea1.cpp:(.text+0x1ab): undefined reference to `NMEAClass::LiczbaInstrukcji()'
collect2: ld returned 1 exit status

Przeszukałem google wzdłuż i wszerz nie znajdując odpowiedzi...
Dodam, że jeśli zawartości plików NMEAClassh i NMEAClass.cpp wstawię do pliku programu (odpowiednio przerabiając), to działa bez problemu...

Ubuntu 9.04
gcc 4.3.3

0

Tia... wstawiłeś wszystko poza plikiem, w którym jest błąd - "nmea1.cpp".

Undefined reference oznacza, że próbujesz się odwołać do metody/funkcji, której linker nie jest w stanie odnaleźć - np z powodu przeoczenia czegoś w includach albo dlatego, że wśród zaincludowanych rzeczy takiej metody/funkcji po prostu nie ma (nie jest widoczna).

0

po prostu źle kompilację przeprowadzałem. pomógł mi użytkownik pewnego forum. trzeba było:

g++ -c nmea1.cpp -o nmea1.o -Wall -ansi -pedantic
g++ -c NMEAClass.cpp -o NMEAClass.o -Wall -ansi -pedantic
g++ nmea1.o NMEAClass.o -o nmea1

jakby ktoś miał podobny problem w przyszłości

pozdrawiam

0

Mam podobny problem i u mnie to nie działa.

[email protected]:~$ g++ -c prr2.cpp -o prr2.o -Wall -ansi
[email protected]:~$ g++ prr2.o -o prr2
prr2.o: In function `main':
prr2.cpp:(.text+0x18): undefined reference to `writeImage()'
prr2.cpp:(.text+0x3a): undefined reference to `writeAscii()'
prr2.cpp:(.text+0x5c): undefined reference to `writeBinary()'
prr2.cpp:(.text+0x7e): undefined reference to `copyHDU()'
prr2.cpp:(.text+0xa0): undefined reference to `readHeader()'
prr2.cpp:(.text+0xc2): undefined reference to `readImage()'
prr2.cpp:(.text+0xe4): undefined reference to `readTable()'
prr2.cpp:(.text+0x106): undefined reference to `readExtendedSyntax()'
prr2.cpp:(.text+0x128): undefined reference to `selectRows()'
prr2.o: In function `CCfits::FITS::setVerboseMode(bool)':
prr2.cpp:(.text._ZN6CCfits4FITS14setVerboseModeEb[CCfits::FITS::setVerboseMode(bool)]+0x11): undefined reference to `CCfits::FITS::s_verboseMode'
collect2: ld returned 1 exit status
[email protected]:~$ 
1

Musisz dodać przy łączeniu (druga linia) odpowiednią bibliotekę (-lfitsio? choć nie jestem pewien, sprawdź w dokumentacji). Zawsze podczas łączenia trzeba podać wszystkie pliki obiektowe posortowane topologicznie po zależnościach (tzn jeżeli biblioteka/plik obiektowy A używa symbolu zdefiniowanego w bibliotece/pliku obiektowym B, to A musi być przed B).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0