Undefined reference to SSL_library_init et SSL_load_error_strings
Je me suis mise en œuvre d'un code d'OpenSSL et ont déjà inclus nécessaire fichiers d'en-tête, mais j'ai toujours des erreurs comme *
undefined reference to
SSL_library_init
Je suppose que c'est une erreur de couplage plutôt que d'une erreur de compilation.
Je suis en œuvre en boîte Linux à l'aide de slickeditor.
Et comment êtes-vous invoquant l'éditeur de liens? Êtes-vous en lui ordonnant de le lier avec la bibliothèque OpenSSL, comme avec
nope. la machine je me suis déjà a openssl. quand je fais qui openssl il montre être chemin comme /usr/bin/openssl. Donc, la prochaine étape que j'ai fait était d'inclure les fichiers d'en-tête dans mon code existant, puis dans slickeditor bien je j'ai essayé d'inclure -llibeay32 et -lssleay32. Mais pas de joie
La bibliothèque OpenSSL est appelé libcrypto. Lien avec avec -lcrypto. Je ne sais rien à propos de SlickEdit. Est-il invoquer le compilateur et l'éditeur de liens pour vous, est-ce fait dans un makefile, ou pensez-vous le faire sur une ligne de commande? En quelque sorte, vous devez dire à l'éditeur de liens lien vers libcrypto. Pour en invoquant gcc en ligne de commande, cela signifie l'ajout de l'option
Toutes mes excuses,
Vous devriez obtenir un test minimal de cas de travail sur la ligne de commande.
-lcrypto
pour gcc?nope. la machine je me suis déjà a openssl. quand je fais qui openssl il montre être chemin comme /usr/bin/openssl. Donc, la prochaine étape que j'ai fait était d'inclure les fichiers d'en-tête dans mon code existant, puis dans slickeditor bien je j'ai essayé d'inclure -llibeay32 et -lssleay32. Mais pas de joie
La bibliothèque OpenSSL est appelé libcrypto. Lien avec avec -lcrypto. Je ne sais rien à propos de SlickEdit. Est-il invoquer le compilateur et l'éditeur de liens pour vous, est-ce fait dans un makefile, ou pensez-vous le faire sur une ligne de commande? En quelque sorte, vous devez dire à l'éditeur de liens lien vers libcrypto. Pour en invoquant gcc en ligne de commande, cela signifie l'ajout de l'option
-lcrypto
.Toutes mes excuses,
SSL_library_init
est dans libssl, de sorte que le lien option serait -lssl
. ldd $(which openssl)
va vous montrer comment votre openssl est lié et où les bibliothèques sont. Si cela ne fonctionne toujours pas, peut-être que le répertoire n'est pas sur le chemin de l'éditeur de liens. Vous pouvez ajouter ce chemin avec -Lpath
, comme -L/lib/
Vous devriez obtenir un test minimal de cas de travail sur la ligne de commande.
#include "whatever" \n int main(void) { SSL_library_init(blah, blah, blah); return 0; }
et puis g++ my_minimal_test_case.c++ -lssl
. Si cela fonctionne, alors vous ne comprenez pas votre éditeur/IDE. Si elle n'est pas le cas, alors vous avez quelques problème de configuration.OriginalL'auteur samprat | 2011-04-08
Vous devez vous connecter pour publier un commentaire.
Lien contre
libssl
etlibcrypto
. VotreLDFLAGS
etLDLIBS
serait comme suit. L'ordre des questions pourLDLIBS
:Ne vous inquiétez pas à propos de l'ajout de la "lib" en face du nom de la bibliothèque, ou le "soi" ou "un" suffixe. L'éditeur de liens va le faire pour vous.
Si vous êtes à la construction de la ligne de commande, vous devez utiliser la syntaxe suivante. Encore une fois, l'ordre des questions.
Si vous utilisez le système d'OpenSSL, vous pouvez omettre
-L/usr/local/ssl/lib
.SSL_library_init
est dans libssl, afin de ne pas les corriger afin d'êtreLDLIBS = -lcrypto -lssl
à la place?Désolé pour la réponse tardive. L'ordre des questions parce que c'est un seul passage de l'éditeur de liens. Lorsque LD rencontres insatisfaits lien symboles, notes et cherche dans les bibliothèques qui suivent. Si
libcrypto
était d'abord, puislibssl
aurait pas satisfait des symboles commeBN_new
parce quelibcrypto
doit suivrelibssl
pour satisfaire les symboles manquants. L'autre option est de deux passes de l'éditeur de liens. Parfois, il vous permettra également de voir quelque chose comme-la -lb -la
(liba
suivie parlibb
suivie parliba
). Il est généralement due à une référence circulaire qui se cache derrière les coulisses.OriginalL'auteur jww
Pour moi cela signifiait pour installer
OriginalL'auteur rogerdpack
ldd libssl.donc -> libcrypto..1.1 => pas trouvé
sudo ln -s /usr/local/lib64/libcrypto..1.1 /usr/lib64/libcrypto..1.1
libcrypto..1.1 => /lib64/libcrypto..1.1 (0x00007f17d46c7000)
OriginalL'auteur Michael Popovich