Reliant les bibliothèques OpenSSL pour un programme
J'ai installé OpenSSL à partir de la source (volontairement ancienne version; construit avec ./config && make && make test
) et préfèrent utiliser ce que j'ai construit sans faire make install
de lien à l'encontre de mon programme.
La commande qui ne fonctionne pas est:
gcc -Wall -Wextra -Werror -static -Lopenssl/openssl-0.9.8k/ -lssl -lcrypto
-Iopenssl/openssl-0.9.8k/include -o myApp source1.o source2.o common.o`
Et je reçois une série d'erreurs de ce type:
common.c:(.text+0x1ea): undefined reference to `SSL_write'
Cela me fait penser il y a quelque chose de funky avec mon OpenSSL. Si je omettre -Lopenssl/openssl-0.9.8k/
de ma commande, la variation de l'erreur d'être incapables:
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
Suis-je la compilation OpenSSL mal? Ou comment résoudre cela?
OriginalL'auteur mrduclaw | 2010-12-04
Vous devez vous connecter pour publier un commentaire.
Idiot "Linux-ismes" frappe à nouveau! Apparemment, j'ai besoin de changer ma commande telle que la
-L
et-l
truc est à la fin aimé (malgré ce queman gcc
semble l'indiquer):gcc -Wall -Wextra -Werror -static -o myApp source1.o source2.o common.o -Lopenssl/openssl-0.9.8k/-lssl -lcrypto -Iopenssl/openssl-0.9.8k/include
-lssl -lcrypto
qui doivent être à la fin. Lorsqu'une bibliothèque est analysé par l'éditeur de liens, seulement les fonctions pour lesquelles il y a déjà pas défini les références sont liés. Si vous avez besoin de mettre le "consommer" des objets au début de la ligne de liaison, et la "fourniture" d'objets à la fin.Je suis toujours bizarre à propos de l'acceptation de mes propres réponses. Je vais passer maintenant.
Comment est-il différent pour les clan de llvm?
OriginalL'auteur mrduclaw
Pourquoi ne voulez-vous pas utiliser
make install
? Il peut copier les binaires générés dans le répertoire que vous voulez si vous avez déjà transmis à./configure --prefix $HOME/target_library_install_directory
Si vous avez utilisé ce truc avec chaque bibliothèque vous construire et à installer, vous pouvez alors ajouter le répertoire cible pour l'
LIBRARY_PATH
variable d'environnement et éviter d'utiliser l'option-L.-L
. Jusqu'-voter, néanmoins.Je vais aller de l'avant et à l'accepter comme réponse que c'est probablement la bonne façon de le faire. Dans mon cas particulier, je ne voulais pas tout le monde qui a vérifié mon code (et de la modification de la OpenSSL code) de faire quelque chose, mais
make
.OriginalL'auteur jopasserat
Si vous utilisez les Autotools, ou vous êtes à la construction d'une Autools projet comme
cURL
, alors vous devriez être en mesure d'utiliserpkg-config
. L'idée est la Autotools paquet de lire OpenSSL du package de configuration et les choses vont "juste travailler pour vous".Le paquet OpenSSL configuration nom de la bibliothèque est
openssl
.Que vous pouvez l'utiliser comme dans un makefile en fonction du projet.
Voir aussi Comment utiliser pkg-config à Faire et Comment utiliser pkg-config pour lier une bibliothèque statique.
pkg-config
. Pouvez-vous expliquer comme je suis à cinq, ce qui lepkg-config
est et comment il fonctionne exactement? comment sa obtenu que l'auto-magiquement viens de trouver tous les liens à inclure dirs etc. Bien sûr, je pourrais l'utiliser comme de la magie, mais son bon de savoir comment il fonctionne en interneOriginalL'auteur jww