Je compile une application C++ en utilisant GNU g++
. Le projet tire parti des bibliothèques OpenSSL.
Sur ma machine (un quad core CentOS 64 bits), je compile et lie mes fichiers.
g++ -g -c -L/usr/local/lib/ -L/usr/lib64/
-I/usr/local/include/ -I/usr/local/ssl/include/
-lcrypto mysrc1.cpp mysrc2.cpp mysrc3.cpp
g++ -L/usr/local/lib/ -L/usr/lib64/ -lcrypto
*.o -o ./myapp.out
Mon application utilise la fonction MD5
qui est contenu dans libcrypto.so
. Comme vous pouvez le voir, je précise à g++
les répertoires où chercher en utilisant le -L
, -I
options et quelles bibliothèques rechercher avec les -l<lib-name>
option. Il existe des chemins triviaux comme /usr/local/lib
qui peut être omis bien sûr, mais je les ai spécifiés car le makefile est paramétrique.
Mon problème est que je peux compiler avec succès mes trucs (première commande), mais la liaison échoue (deuxième commande):
/ usr/bin/ld: impossible de trouver -lcrypto
collect2: ld a renvoyé 1 statut de sortie
make: * [cppsims_par] Erreur 1
Mais j'ai vérifié les dossiers et tout ... libcrypto.so
Est à l'intérieur /usr/lib64/
. Que se passe-t-il?
Cela peut être utile si vous essayez strace pour savoir pourquoi la recherche de fichiers a échoué
strace -f -e trace=file g++ -L/usr/local/lib/ -L/usr/lib64/ -lcrypto
*.o -o ./myapp.out
J'ai trouvé le problème et il est lié à cette question: ld ne peut pas trouver une bibliothèque existante
En fait, je n'avais pas de lien symbolique libcrypto.so
et le compilateur n'a pas pu trouver la bibliothèque ...