web-dev-qa-db-fra.com

C ++: l'éditeur de liens ne peut pas trouver -lcrypto, mais la bibliothèque se trouve dans le chemin

Je compile une application C++ en utilisant GNU g++. Le projet tire parti des bibliothèques OpenSSL.

Contexte

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.

Le problème

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?

11
Andry

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
4
tristan

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 ...

3
Andry