PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Compilerfehler: "undefined reference to"


pajofego
2011-12-05, 22:22:50
Hallo zusammen,

so langsam bin ich mit meinem Latein am Ende oder einfach nur Betriebsblind...? :mad:

Auf einer 32 bit Maschine compiliert der Code problemlos, auf ein 64 bit System bekomme ich stet's folgende Fehlermeldung:

/home/pajofego/OpenFOAM/pajofego-1.7.1/lib/linux64GccDPOpt/libOpenSMOKE/lib/libOpenSMOKE_pdfThermo.so: undefined reference to `OpenSMOKE_PDF_NonAdiabaticFlamelet_Library::number_of_species()'

collect2: ld gab 1 als Ende-Status zurück
make: *** [/home/pajofego/OpenFOAM/pajofego-1.7.1/applications/bin/linux64GccDPOpt/rhoSimpleFoamFlamelets_1007] Fehler 1


So, im Normalfall stimmt was nicht mit der library die gelinkt werden muss. Im wmake Makefile steht aber diese inkl. der Pfadangabe drinne.

Hier das Makefile für wmake mit der Pfadangabe für die o.g. library libOpenSMOKE_pdfThermo.so

EXE_INC = \
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
-I$(LIB_SRC)/turbulenceModels \
-I$(LIB_SRC)/turbulenceModels/compressible/RAS/RASModel \
-I$(LIB_SRC)/finiteVolume/cfdTools \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I/home/pajofego/OpenFOAM/pajofego-1.7.1/libOpenSMOKE/src/libraries/common/src \
-I/home/pajofego/OpenFOAM/pajofego-1.7.1/libOpenSMOKE/src/libraries/flamelets/src \
-I/home/pajofego/OpenFOAM/pajofego-1.7.1/libOpenSMOKE/src/libraries/pdfThermo/hPdfThermo\
-I/home/pajofego/OpenFOAM/pajofego-1.7.1/libOpenSMOKE/src/libraries/pdfThermo/basicPdfThermo \
-I/home/pajofego/OpenFOAM/pajofego-1.7.1/Libraries/gsl-1.9

EXE_LIBS = \
-L$(FOAM_USER_LIBBIN)/libOpenSMOKE/lib\
-lOpenSMOKE_common \
-lOpenSMOKE_flamelets \
-lOpenSMOKE_pdfThermo \
-lbasicThermophysicalModels \
-lspecie \
-lcompressibleRASModels \
-lfiniteVolume \
-lmeshTools \
-lgsl \
-lgslcblas

Ein ls -l auf ~/OpenFOAM/pajofego-1.7.1/lib/linux64GccDPOpt/libOpenSMOKE/lib$ zeigt mir auch den entsprechenden Inhalt an:

-rwxrwxr-x 1 pajofego pajofego 42294 2011-11-27 21:48 libOpenSMOKE_common.so
-rwxrwxr-x 1 pajofego pajofego 148885 2011-11-27 21:48 libOpenSMOKE_flamelets.so
-rwxrwxr-x 1 pajofego pajofego 311207 2011-11-27 21:49 libOpenSMOKE_pdfThermo.so
-rwxrwxr-x 1 pajofego pajofego 43184 2011-11-27 21:49 libOpenSMOKE_qmom.so
-rwxrwxr-x 1 pajofego pajofego 99004 2011-11-27 21:49 libOpenSMOKE_twoequations.so


Habt Ihr einen Tipp woran das liegen könnte, bzw. was ich machen kann um den Fehler ausfindig zu machen?

Danke und Gruß
pajofego

Ectoplasma
2011-12-05, 23:30:33
Hmmm, probier mal die Reihenfolge der Libs zu vertauschen. Packe mal die ganzen OpenSMOKE Libs nach unten. Solche ähnlichen Problem hatte ich nämlich auch schon. Allerdings mit GNU make files und dem gcc/ld.

BeetleatWar1977
2011-12-06, 09:14:25
evtl nur eine 32bit lib?

pajofego
2011-12-06, 22:15:13
@Ectoplasma: Hat leider nicht geklappt. Der Fehler bleibt bestehen.

@BeetleatWar1977: Nein, sind 64 bit Libs. Habe diese im Vorfeld selbst erfolgreich compiliert.

Habt ihr evt. noch weiter Tipps? Gibt's evt. Werkzeuge oder Tools um solchen Fehlern auf die Schliche zu kommen?

Danke und Gruß
pajofego

Ectoplasma
2011-12-07, 09:51:40
Du kannst auch zur Not auch mit einem Texteditor in OpenSMOKE_pdfThermo schauen, ob sich das Symbol number_of_species überhaupt darin befindet.

PHuV
2011-12-07, 15:15:24
Du kannst auch zur Not auch mit einem Texteditor in OpenSMOKE_pdfThermo schauen, ob sich das Symbol number_of_species überhaupt darin befindet.

Mit strings geht das schneller. ;)


Ansonsten vielleicht mal LD_LIBRARY_PATH explizit auf die 64er-Lib-Verzeichnis setzen?

Coda
2011-12-07, 15:40:35
Lass dir mal die exports anzeigen der libraries:

readelf -s libOpenSMOKE*.so

Und gleich nach dem Symbol suchen dabei:

readelf -s libOpenSMOKE*.so | fgrep number_of_species

pajofego
2011-12-07, 22:31:31
Erst einmal danke für eure Beiträge. In der Tat, mit gedit oder mit den Kommandos von Coda bekomme ich kein Suchergebnis, wenn ich nach "number_of_species()" suche. Ein Blick in den Code zeigt, dass die Methode int number_of_species() in der entsprechenden hpp Datei definiert ist. Merkwürdig unter 32 Bit gibt's dieses Problem nicht?!? Konnte bis jetzt auch keine Flags finden, die im 64 Bit Modus irgendwelchen Code ausschaltet.

Also die Situation stellt sich so dar. Im Code für die Libraries ist alles soweit definiert. Die Libraries werden compiliert, aber irgendwie nicht komplett. Kann das sein? Kann sowas passieren? Erscheint mir doch sehr ungewöhnlich.

Danke und Gruß,
pajofego