J'ai le code suivant dans le fichier rsatest.c
. J'essaie de générer une paire de clés RSA.Référence non définie à RSA_generate_key dans OpenSSL?
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main(){
RSA *rsa = RSA_generate_key((const int) 1024,(const int) 3, 0, 0);
return 0;
}
Je compile avec ce
gcc -I../include/ -L . -lcrypto -lssl rsatest.c
et je reçois l'erreur suivante.
undefined reference to `RSA_generate_key'
Est-ce que je lie les fichiers de la bibliothèque dans le mauvais ordre? J'ai fait le libcrypto.a et libssl.a sur Windows (64 bits), avec msys et mingw, et je cours le code sur le même système.
RSA_generate_key a été déclaré dans rsa.h. Est-ce qu'il n'est pas défini dans libcrypto.a?
EDIT:
J'ai essayé cela aussi,
gcc -I../include rsatest.c -L . -lcrypto -lssl
et je comprends que l'éditeur de liens rechercher des définitions dans les bibliothèques allant de gauche à droite.
Cependant, je reçois de nouvelles références non définies à diverses fonctions dans
rand_win.o and c_zlib.o
J'ai regardé en ligne et trouvé les symboles manquants dans les bibliothèques gdi32 et zlib. Donc j'ai ajouté
-lz and -lgdi32
Le compilateur ne s'est pas plaint d'une bibliothèque manquante, donc je suppose qu'ils sont présents avec mingw. Et encore, j'ai la même sortie. J'ai aussi utilisé nm, et j'ai trouvé que les symboles n'étaient en effet pas définis dans rand_win.o et c_zlib.o.
Pourquoi l'éditeur de liens ne semble-t-il pas trouver de définitions dans ces bibliothèques?
Utilisez l'outil 'nm' pour vérifier où le symbole est –
Vous devriez utiliser [' RSA_generate_key_ex'] (http://www.openssl.org/docs/man1.0.2/crypto/RSA_generate_key_ex.html), pas ' RSA_generate_key'. – jww