2017-08-25 4 views
1

J'ai essayé de lier mon programme C à libssl.so, mais l'éditeur de liens ne parvient pas à trouver une fonction dans cette bibliothèque qui existe dans le fichier d'en-tête.Fonction déclarée dans openssl/sha.h mais introuvable dans la bibliothèque partagée

Makefile code cible:

$(CC) -o [email protected] $^ $(CFLAGS) -lssl -lmagic 

sortie:

... 
/usr/bin/ld: obj/signature.o: undefined reference to symbol '[email protected]@OPENSSL_1_1_0' 
//usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 
... 

La fonction est SHA256_Init() et il est présent en openssl/sha.h ce qu 'il inclus dans le fichier source. Je suis sur Debian 9. J'ai installé les paquets suivants: libssl1.0.0, libssl1.0.2, libssl1.1, libssl-dev (1.1.0).

$ la /usr/lib/x86_64-linux-gnu/libssl* 
-rw-r--r-- root root 357024 /usr/lib/x86_64-linux-gnu/libssl3.so 
-rw-r--r-- root root 738444 /usr/lib/x86_64-linux-gnu/libssl.a 
lrwxrwxrwx root root  13 /usr/lib/x86_64-linux-gnu/libssl.so -> libssl.so.1.1 
-rw-r--r-- root root 395176 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 
-rw-r--r-- root root 431232 /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 
-rw-r--r-- root root 442920 /usr/lib/x86_64-linux-gnu/libssl.so.1.1 

Qu'est-ce que je fais mal et comment résoudre le problème? OpenSSL est scindé en 2 bibliothèques, libssl et libcrypto, ces fonctions résident dans libcrypto, vous n'avez donc pas besoin de lier à libssl.

+0

Que fait 'nm -D /usr/lib/x86_64-linux-gnu/libssl.so | grep SHA256' spectacle? – Barmar

+0

@Barmar, 'U SHA256_Init' et' U SHA256_Transform'. – user1764823

+0

Je pense que le '@@ OPENSSL_1_1_0' est significatif. Je ne suis pas sûr d'où cela vient, il semble que ce soit quelque chose comme mangling name C++. – Barmar

Répondre

3

Utilisez

-lcrypto 

Vous devriez également lire documentation pour plus d'informations, par exemple comment initialiser correctement libcrypto