[Resolu]OpenSSL erreur bizarre...

OpenSSL erreur bizarre... [Resolu] - C - Programmation

Marsh Posté le 31-07-2008 à 15:03:37    

Bonjour!
je me suis lancé dans OpenSSL et j'ai un gros problème lors de la compilation...
je me suis servie de ce site la : http://www-128.ibm.com/developerwo [...] enssl.html qui est plutot bien fait malgré que ça soit en anglais... donc j'ai fait un pitit programme tout basique : création, ouverture et femeture de la connexion SSL via le BIO
(au passage j'ai oublié de préciser que je travaillais sous linux)
et bref, quand je lance le make, il me dit :  

Code :
  1. /mc6500/v17.1b/tdd/Projet_SSL/src/client_essai1.c:25: undefined reference to `SSL_load_error_strings'
  2. /mc6500/v17.1b/tdd/Projet_SSL/src/client_essai1.c:26: undefined reference to `ERR_load_BIO_strings'
  3. /mc6500/v17.1b/tdd/Projet_SSL/src/client_essai1.c:27: undefined reference to `OPENSSL_add_all_algorithms_noconf'
  4. /mc6500/v17.1b/tdd/Projet_SSL/src/client_essai1.c:30: undefined reference to `BIO_new_connect'
  5. /mc6500/v17.1b/tdd/Projet_SSL/src/client_essai1.c:39: undefined reference to `BIO_ctrl'
  6. /mc6500/v17.1b/tdd/Projet_SSL/src/client_essai1.c:42: undefined reference to `ERR_print_errors_fp'
  7. /mc6500/v17.1b/tdd/Projet_SSL/src/client_essai1.c:43: undefined reference to `BIO_free_all'
  8. /mc6500/v17.1b/tdd/Projet_SSL/src/client_essai1.c:47: undefined reference to `BIO_free_all'


en gros, toutes les fonctions ssl et bio, il ne les connait pas alors que j'ai installé ssl et que j'ai précisé les chemins vers les headers dans mes include
bref, je suis assez perplexe, si quelqu'un pouvait m'aider...
merci par avance


Message édité par Bathou le 05-08-2008 à 10:18:59
Reply

Marsh Posté le 31-07-2008 à 15:03:37   

Reply

Marsh Posté le 31-07-2008 à 15:58:05    

Les chemins dans les includes sont nécessaires pour la phase de la compilation.
Mais cette phase est suivie de la phase de l'édition des liens, et pour elle, il faut indiquer l'emplacement de la ou les bibliothèques.

Reply

Marsh Posté le 31-07-2008 à 16:03:50    

merci pour la réponse!  
mon souci c'est que je ne sais pas ou sont les bibliothèques... ni laquelle utilisée... j'ai trouvé dans usr/lib/openssl/engines des libblabla.so
est ce que ca serait ca...?
si oui, comment j'indique leur emplacement...? dans le .c ou dans le make...?
 
ps : j'ai trouvé libssl.a et libcrytpo.a c'est peut être plutôt ca non?


Message édité par Bathou le 31-07-2008 à 16:05:28
Reply

Marsh Posté le 31-07-2008 à 16:09:24    

Oui, les ".so" sont des shared object modules, donc des bibliothèques. Parfois ce sont aussi des ".a" ou des ".lib". (Edit : On peut utiliser des bibliothèques ".so" ou des bibliothèques ".a". Les deux marchent mais pour des utilisations un peu différentes, dont je ne me souviens plus très bien, mais qui est habituellement expliqué dans la documentation.)
 
Il faut les spécifier dans le makefile.
Comment ? Généralement on utilise l'option -l (lettre "elle" en minuscule). Mais ce n'est pas forcément évidemment. Le mieux est de s'inspirer d'exemples.


Message édité par olivthill le 31-07-2008 à 16:12:16
Reply

Marsh Posté le 31-07-2008 à 16:17:14    

alors, si j'ai compris, il faut que je rajoute une ligne dans mon fichier .mk
j'ai mis ca mais ca n'a pas changé... :

Code :
  1. LD=-l ../lib  -lssl -lcrypto


vu que je débute aussi en programmant sous linux, j'ai quelques difficultés...

Reply

Marsh Posté le 31-07-2008 à 20:45:15    

si tu donnais le makefile ou le code ou une partie ça serais plus facile...

Reply

Marsh Posté le 01-08-2008 à 09:20:36    

alors, le makefile :  

Code :
  1. # --- make client_essai1.mk ---------------------------------------------
  2. # 31/07/2008 : -Creation pour Linux
  3. PRJ=tdd/Projet_SSL
  4. MKP=../../com/sys/linux/sys
  5. OPT= -D _GNU_SOURCE
  6. SRC=client_essai1.c
  7. INC=inc ../../com/sys/linux \
  8.        ../../../../usr/local/ssl/include\
  9. LD=-L /usr/local/ssl/lib -lsll\
  10.  
  11. DIR=src
  12. EXE=client_essai1
  13. include $(MKP)/make_EXE


 
et le code  :

Code :
  1. /*OpenSSL headers*/
  2. #include "openssl/ssl.h"
  3. #include "openssl/bio.h"
  4. #include "openssl/err.h"
  5. /*Other headers*/
  6. #include "stdio.h"
  7. #include "string.h"
  8. //****************************************************************************//
  9. //               //
  10. // Programme Principal             //
  11. //               //
  12. //****************************************************************************//
  13. int main()
  14. {
  15.   /*variable*/
  16.   BIO *bio;
  17.   /*Initializing OpenSSL*/
  18.   SSL_load_error_strings();
  19.   ERR_load_BIO_strings();
  20.   OpenSSL_add_all_algorithms();
  21.   /*Creating and Opening a connection*/
  22.   bio=BIO_new_connect("www.verisign.com:80" );/*cf nossl.c */
  23.   if (bio==NULL)
  24.   {
  25.     /*Handle the failure*/
  26.     printf("BIO is null\n" );
  27.     return;
  28.   }
  29.   if (BIO_do_connect(bio)<=0)
  30.   {
  31.     /*Handle failed connection*/
  32.     ERR_print_errors_fp(stderr);
  33.     BIO_free_all(bio);
  34.   }
  35.   /*Closing the connection*/
  36.   BIO_free_all(bio);
  37.   return(0);
  38. }

Reply

Marsh Posté le 05-08-2008 à 10:14:25    

c'est bon, j'ai trouvé, c'était en fait un problème d'installation de OpenSSL ^^

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed