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.
Réponses
Trop de publicités?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
Comme on peut le voir dans le Catalogue des règles intégrées :
Lier un seul fichier objet
n
se fait automatiquement à partir den.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.