Undefined reference to t1sl_steup_key_block lors de la liaison d'OpenSSL
J'ai eu un problème de liaison d'une bibliothèque OpenSSL dans un projet existant.
Où je ne me trompe?
Ci-dessous sont les étapes que j'ai suivies.
J'ai téléchargé la bibliothèque SSL, configuré et installé. Il est installé dans /usr/local/ssl
.
2) j'ai copié libcrypto.a
et libssl.a
de /usr/local/ssl/lib
dans mon projet, quelque chose comme /mnt/linux/bla/bla/lib
.
3) Puis-je modifier le fichier de créer et ajouté chemin de libssl libcrpto. Le chemin est ajouté un qui est dans un projet comme /mnt/linux/bla /bla
3) faire
4) projet de construction via la nappe de modifier
Lorsqu'il construit je reçois une longue erreur de la chaîne, comme
../lib/libssl.a(t1_enc.o) :In function 't1sl_steup_key_block: undefined ref
Maintenant, je suppose que la copie .un fichiers en projet pourrait être un problème. Est il n'y a aucune alternative pour qui ou dois-je utiliser ln -s
de lien .un des fichiers de la forme /usr/local/openssl/lib
dans mon projet de dossier de la bibliothèque? Ci-dessous est l'erreur.
Debug/FC5/m2pa.o -ldl -lpthread -ltdapi ../septel/gctlib.lib ../lib/libpq.a ../asn1/lib/libasn1per.a ../mysql/lib/libmysqlclient.a -L../lib ../asn1/lib/libasn1rt.a -lm -lcrypt -lcrypto -lssl -rdynamic
../lib/libssl.a(ssl_lib.o): In function `SSL_set_quiet_shutdown':ssl_lib.c:(.text+0x670): multiple definition of `SSL_set_quiet_shutdown'
../mysql/lib/libmysqlclient.a(ssl.o):ssl.cpp:(.text+0x125c): first defined here
/usr/bin/ld: Warning: size of symbol `SSL_set_quiet_shutdown' changed from 45 in ../mysql/lib/libmysqlclient.a(ssl.o) to 12 in ../lib/libssl.a(ssl_lib.o)
../lib/libssl.a(ssl_lib.o): In function `SSL_get_quiet_shutdown':ssl_lib.c:(.text+0x680): multiple definition of `SSL_get_quiet_shutdown'
../mysql/lib/libmysqlclient.a(ssl.o):ssl.cpp:(.text+0x12down' changed from 35 in ../mysql/lib/libmysqlclient.a(ssl.o) to 8 in ../lib/libssl.a(ssl_lib.o)
../lib/libssl.a(ssl_err2.o): In function `SSL_load_error_strings':ssl_err2.c:(.text+0x4): undefined reference to `ERR_load_crypto_strings'
../lib/libssl.a(ssl_algs.o): In function `SSL_library_init':ssl_algs.c:(.text+0x4): undefined reference to `EVP_des_cbc'
:ssl_algs.c:(.text+0xc): undefined reference to `EVP_add_cipher'
:ssl_algs.c:(.text+0x11): undefined reference to `EVP_des_ede3_cbc'
:ssl_algs.c:(.text+0x19): undefined reference to `EVP_add_cipher'
:ssl_algs.c:(.text+0x1e): undefined reference to `EVP_idea_cbc'
Merci pour la réponse . Mon premier doute est " pensez-vous de sa bonne procédure pour copier simplement libcrypto.un et libssl.a partir de /usr/local/ssl/lib dans mon projet dossier lib? OU ai-je besoin de faire des liens symboliques comme ln -s
c'est ma ligne de plus dans le fichier italique en gras '# bibliothèques Communes COM_LIB=-ldl -lpthread -ltdapi ../septel/gctlib.lib ../lib/libpq.un \ ../asn1/lib/libasn1per.un \ ../mysql/lib/libmysqlclient.../lib/libcrypto.../lib/libssl.un\ ../asn1/lib/libasn1rt.l'a-lm -lcrypt -lcrypto -lssl '
Ok, votre construction de la ligne de vous, y compris libssl et libcrypto deux fois. Une fois explicitement (../lib/libssl.et plus loin -ssl - même pour libcrypto) vous devriez faire -L ../lib puis -lssl. Qui pourrait être votre problème si vous utilisez gcc. Sinon, vous pouvez essayer de
-Wl, start-group <your library list> -Wl, end-group
autour de la liste des bibliothèques de sorte GCC recherche les symboles correctement. J'ai besoin de voir vos erreurs, les symboles non définis, peut-être vous dire ce que libs que vous êtes absent.PS: Vous n'avez pas besoin d'avoir libssl.un libcrypto.un dans votre arbre de construction. Sauf si vous faites de la croix-plate-forme des choses, alors vous devriez avoir la bonne version de votre arbre (ou mieux obtenir le SSL source et de le créer à votre cible).
OriginalL'auteur samprat | 2011-04-18
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé d'utiliser la libssl et libcrypto déjà installée dans votre répertoire /usr/lib (en supposant que vous avez installé les paquets dev pour les deux)? Une fois que compile et s'exécute sans erreur à l'aide de l'installation par défaut, vous pouvez construire votre nouvelle libssl/libcrypto(?) à partir de la source, installer usr/local, et de reconstruire à l'aide de l'usr/local versions des bibliothèques.
OriginalL'auteur Marc
Vous avez besoin d'ajouter le drapeau
-lssl
et-lcrypto
dans votre makefile"Par exemple:
OriginalL'auteur efr4k