gcc Link Options Verständnisproblem
-
Hallo.
ich bin gerade dabei meine Anwendung von win32 nach Linux zu porten. Auf Linux verwende ich gcc. Das Bauen meiner Anwendung funktioniert fehlerfrei, jedoch treibt mich gcc in den Wahnsinn, da ich nicht verstehe warum der es so macht.
Als Build-System verwende ich qmake, aber das sollte eigentlich nicht relevant sein.
Hier mal meine Linker-Options.
unix:LIBS += -L/opt/boost_1_48_0/stage/lib -lboost_system -lboost_thread \ -L/opt/projects/somelib -lsomelib \
Soweit so gut. Wenn ich nun ein ldd fahre um alles einmal zu überprüfen, bekomme ich merkwürdige Resultate.
ldd myapp
Hier das Problem:
libboost_system.so.1.47.0 => /usr/local/lib/libboost_system.so.1.47.0 (0x00007ff266917000) libboost_thread.so.1.47.0 => /usr/local/lib/libboost_thread.so.1.47.0 (0x00007ff2666fc000) libsomelib.so.1 => not found
Wieso teile ich gcc mit wo er was finden kann und dann macht er doch was er will. Kann mir jemand erklären was gcc da genau macht, denn das kann ich nicht ganz nachvollziehen. Alternative wäre auch eine Option die das einfach abschaltet.
Ich habe mir mal diesen Artikel durchgelesen: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html Jedoch finde ich da keine lösung, oder ich habe sie überlesen, naja nun bin ich irgendwie noch verwirrter.
Über etwas Hilfe wäre ich dankbar.
-
Du teilst dem Linker mit -L mit, wo er die Library finden kann. Er findet sie ja auch. Er erzeugt ja korrekt eine Referenz auf die Library.
Zur Laufzeit benötigt das Programm auch diese Library, da sie ja dynamisch gelinkt ist. Es findet sie beispielsweise über die Umgebungsvariable LD_LIBRARY_PATH. Also:
export LD_LIBRARY_PATH=/opt/projects/somelib ldd myapp
Dann sollte es das finden. Alternativ kannst Du den Pfad auch mit -rpath in das binary rein complieren. Das findest Du sicher im gcc Handbuch.
-
Hallo.
logisch... Danke für die Antwort nun hat es endlich 'klick' gemacht.