Référence non définie à RSA_generate_key dans OpenSSL?

J’ai le code suivant dans le fichier rsatest.c . J’essaie de générer une paire de clés RSA.

 #include  #include  int main(){ RSA *rsa = RSA_generate_key((const int) 1024,(const int) 3, 0, 0); return 0; } 

Je comstack ceci avec

 gcc -I../include/ -L . -lcrypto -lssl rsatest.c 

et j’obtiens l’erreur suivante.

  undefined reference to `RSA_generate_key' 

Est-ce que je relie les fichiers de la bibliothèque dans le mauvais ordre? J’ai créé les libcrypto.a et libssl.a sous Windows (64 bits), avec msys et mingw, et j’exécute le code sur le même système.

RSA_generate_key a été déclarée dans rsa.h. N’est-ce pas défini dans libcrypto.a?

MODIFIER :

J’ai aussi essayé ça

 gcc -I../include rsatest.c -L . -lcrypto -lssl 

et je comprends que l’éditeur de liens cherchera des définitions dans les bibliothèques allant de gauche à droite.

Cependant, je reçois de nouvelles références indéfinies à diverses fonctions de

 rand_win.o and c_zlib.o 

J’ai cherché en ligne et trouvé les symboles manquants dans les bibliothèques gdi32 et zlib. Alors j’ai ajouté

 -lz and -lgdi32 

Le compilateur ne s’est pas plaint d’une bibliothèque manquante. Je suppose donc qu’ils sont présents avec mingw. Et toujours, je reçois le même résultat.

J’ai également utilisé nm et constaté que les symboles n’étaient en réalité pas définis dans rand_win.o et c_zlib.o.

Pourquoi l’éditeur de liens ne semble-t-il pas trouver des définitions dans ces bibliothèques?

Changez l’ordre dans votre commande gcc.

 gcc -I../include/ rsatest.c -L . -lcrypto -lssl 

Pour autant que je sache, l’éditeur de liens a une liste de symboles non définis. Quand il traite libcrypto.a et libssl.a, il n’a rien dans la liste des symboles indéfinis, il supprime donc simplement les bibliothèques. Après traitement, après traitement, il y a quelque chose dans sa liste mais il ne recherche pas de symboles dans les bibliothèques déjà traitées.