2014-12-22 6 views
6

Ich kompiliere mit Arm-Linux-gnueabi-g ++ Version 4.7.3.Undefinierter Verweis auf 'dlsym' und 'dlopen'

Ich habe die Arm-linux-gnueabi am Ort installierten Bibliotheken:

/usr/Arm-linux-gnueabi/lib, es enthält libdl.a, libdl.so, libdl.so.2, und libdl-2.19.so.

libdl.so verweist auf libdl.so.2, das auf libdl-2.19.so verweist.

Ich versuche, mit der DLL-Bibliothek zu verknüpfen (siehe Befehlszeile unten), aber ich bekomme immer die undefinierten Referenzfehler.

Wenn ich kompiliere mit g ++ 4.8.2 mit der folgenden Empfehlung dann kompiliert mein Programm, Links und führt gut aus.

g++ -I. -I../ -I../Comms/Linux -Wall -DLINUX -fpic -o ../../work/MyProgram main.o 
-L../../work -lComms -lConsole -lUtilities -ldl 

Offensichtlich kann es die Bibliothek libdl.so nicht finden; Ich dachte, dass durch das Hinzufügen des Pfades zum Speicherort der entsprechenden Bibliothek mit dem -L Flag das Problem beheben würde, aber es nicht.

Was fehlt mir mit dem ARM-Compilerbefehl?

+0

möglich duplicate von [Undefinierter Verweis auf 'dlsym'] (http://stackoverflow.com/questions/20369672/undefined-reference-to-dlsym) –

Antwort

10

Nun, ich fand die Antwort, ich brauchte -Wl,--no-as-needed Flagge vor der -ldl. Ich war über diese Flagge gestolpert, bevor ich die Frage gestellt habe, aber sie hat es offensichtlich falsch geschrieben, weil es für mich nicht funktioniert hat.

Ich verstehe nicht, warum die Flagge benötigt wird, aber der Code beendet die Verknüpfung jetzt.

Ein SO-Benutzer here sagt, dass es mit den letzten (2013 als der Benutzer Post) Versionen von gcc Verbindung zu --as-benötigt.

+0

Sie haben mir viel Zeit gespart, danke. –

Verwandte Themen