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.
Que fait 'nm -D /usr/lib/x86_64-linux-gnu/libssl.so | grep SHA256' spectacle? – Barmar
@Barmar, 'U SHA256_Init' et' U SHA256_Transform'. – user1764823
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