Code potierung von windows zu linux: linker fehler

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
qba
Beiträge: 58
Registriert: 18.11.2004 14:16:14

Code potierung von windows zu linux: linker fehler

Beitrag von qba » 09.08.2006 22:25:16

hi,

ich bin gerade dabei code von Windows nach linux zu portiern.
Unter Windows kompiliert alles schön aber unter linux mit Kdvelop/g++ erhalte ich einige linker fehler z.b.:
undefined reference to `CLogfile::Log(std::basic_string<...>, std::allocator<char> > const&)'
Die h und die cpp von CLogfile sind teil des Projekts und die Funtion Log ist auch in h und cpp.

Leider finde ich den fehler nicht.
Jemmand ne ahnung?

qba

Edit by Snoopy:
Quote-Tags für die Leserlichkeit eingefügt.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 09.08.2006 22:56:27

Du findest den Fehler nicht, hälst es aber für möglich, daß wir, ausgestattet mit dieser düftigen Information, den Fehler finden könnten ?
Aus Erfahrung kann ich dir nur sagen, daß ich einen Irrtum des Linkers für ausgeschlossen halte 8)
Es ist daher davon auszugehen, daß dieses Symbol in einer der Dateien (.o, so, .a), die du da zusammen linkst, referenziert wird, aber in keiner dieser Dateien definiert wird.

Gruß
gms

qba
Beiträge: 58
Registriert: 18.11.2004 14:16:14

Beitrag von qba » 10.08.2006 05:29:12

Die funtktionen sind definitiv implementiert.
ich hab gerade mal einzel jede cpp datei kompiliert das löst das problem auch nicht...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 10.08.2006 11:27:31

mit "nm" kannst du dir anschauen, welche Symbole in welchem Object (bzw Shared Object oder Library) referenziert, bzw definiert werden:

z.B.:
hier wird das Symbol "X::dowork" referenziert:

Code: Alles auswählen

gms@gms4:~$ nm m.o | c++filt | grep dowork
         U X::dowork()
und hier wird es definiert:

Code: Alles auswählen

gms@gms4:~$ nm x.o | c++filt | grep dowork
00000000 T X::dowork()
(statt dem Pipen in "c++filt" könntest du auch die "--demangle" Option vom "nm" verwenden. Diese gibt es aber nicht auf allen OS.)

hoffe das hilft dir weiter

Gruß
gms

Antworten