2014-12-22 16 views
6

Sto compilando utilizzando arm-linux-gnueabi-g ++ versione 4.7.3.Riferimento non definito a 'dlsym' e 'dlopen'

ho le librerie braccio-linux-gnueabi installate presso la sede:

/usr/arm-linux-gnueabi/lib, contiene libdl.a, libdl.so, libdl.so.2, e libdl-2.19.so.

libdl.so collega a libdl.so.2 che collega a libdl-2.19.so.

Sto tentando di collegarmi alla libreria dl (vedere la stringa di comando di seguito), ma ottengo sempre gli errori di riferimento non definiti.

Se compilo utilizzando g ++ 4.8.2 utilizzando il seguente comando, il mio programma verrà compilato, collegato ed eseguito correttamente.

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

Ovviamente non è possibile trovare la libreria libdl.so; Ho pensato che aggiungendo il percorso alla posizione della libreria appropriata utilizzando il flag -L avrebbe risolto il problema, ma non è stato così.

Cosa mi manca con il comando del compilatore ARM?

+0

possibile duplicato di [riferimento non definito a 'dlsym'] (http://stackoverflow.com/questions/20369672/undefined-reference-to-dlsym) –

risposta

10

Bene, ho trovato la risposta, avevo bisogno della bandiera -Wl,--no-as-needed prima dello -ldl. Avevo attraversato questa bandiera prima di fare la domanda, ma a quanto pare l'ho scritta male perché non aveva funzionato per me.

Non capisco perché sia ​​necessario il flag, ma il codice termina il collegamento ora.

Un utente SO here dice che ha a che fare con le versioni recenti (2013 del post dell'utente) del collegamento gcc a --as-needed.

+0

Mi hai risparmiato un sacco di tempo, grazie. –