J'essaye d'utiliser l'interface EVP d'OpenSSL pour faire du chiffrement. Je suis assez sûr que mon code est correct, mais je n'arrive pas à le compiler. J'utilise GCC, et Ubuntu 32 bits précis avec libssl-dev installé et à la dernière version.Liaison libssl et libcrypto dans GCC
Le projet consiste actuellement en un fichier, program.c
.
#include <openssl/evp.h>
...
i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha1() ...);
...
EVP_CIPHER_CTX_init(e_ctx);
entre autres appels divers.
Voici comment j'invoque gcc:
gcc -Wall -g -lssl -lcrypto -o program program.c
Puis-je obtenir une sortie comme ce
/home/andy/program/program.c:31: undefined reference to `EVP_sha1'
/home/andy/program/program.c:31: undefined reference to `EVP_aes_256_cbc'
/home/andy/program/program.c:31: undefined reference to `EVP_BytesToKey'
/home/andy/program/program.c:44: undefined reference to `EVP_CIPHER_CTX_init'
Ainsi include travaille clairement:
[email protected]:/usr/include$ find . | grep evp.h
./openssl/evp.h
est ici la sortie locate libcrypto
. Ma meilleure supposition est que c'est un endroit stupide pour cela et c'est pourquoi mon lien échoue, donc j'ai essayé -L/usr/lib/i386-linux-gnu
avant -lcrypto
sans aucune chance aussi.
/lib/i386-linux-gnu/libcrypto.so.1.0.0
Je suis un peu perplexe. Si quelqu'un veut me faire sentir comme un imbécile, je serais très excité de comprendre ce que je fais mal!
Oui, l'ordre et le placement sont importants lors de la liaison. Les options '-l' devraient venir à la fin de la commande du pilote du compilateur (GCC). Et l'ordre des bibliothèques est également important car 'ld' est un éditeur de liens unique. Donc '-lssl -lcrypto' fonctionne, mais' -lcrypto -lssl' ne fonctionnera pas. Vous obtiendrez des erreurs d'éditeur de liens car 'ld' est déjà visité' libcrypto' quand il consulte 'libssl' (' libssl' a besoin de '' libcrypto' '). – jww