3 votes

Comment faire face aux erreurs "référence non définie à dlopen" lors de la compilation et de l'utilisation d'OpenFST sur Ubuntu ?

J'essaie de compiler et d'utiliser OpenFST sur Ubuntu 13.10 conduit à des erreurs de liens comme "undefined references to dlopen". Comment résoudre ce problème ? Une recherche en ligne suggère d'inclure -ldl dans la ligne de commande de gcc, mais cela n'est pas suffisant.

9voto

Prateek Points 2491

Compilez comme suit :

./configure LDFLAGS=-Wl,--no-as-needed
make
sudo make install

Pour compiler votre a.cpp qui utilise la bibliothèque, faites

g++ -I /usr/local/include a.cpp /usr/local/lib/libfst.so -Wl,--no-as-needed -ldl

Il est important que le -ldl apparaît après -Wl,--no-as-needed .

L'exécution de votre programme fonctionne comme vous l'attendez du README fourni par OpenFST, vous devez juste avoir /usr/local/lib dans votre LD_LIBRARY_PATH . Par exemple,

LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" ./a.out

4voto

Comme on peut le voir dans le Catalogue des règles intégrées :

Lier un seul fichier objet

n se fait automatiquement à partir de n.o en exécutant l'éditeur de liens (généralement appelé ld ) via le compilateur C. La recette précise utilisée est la suivante :

$(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS)

et Variables utilisées par les règles implicites :

LDFLAGS

Des drapeaux supplémentaires à donner aux compilateurs lorsqu'ils sont censés invoquer l'éditeur de liens, ld tels que -L . Bibliothèques ( -lfoo ) doit être ajouté à la variable LDLIBS à la place.

Donc dans ce cas -ldl doit être défini ou ajouté à LDLIBS, et non à LDFLAGS.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X