utiliser le langage C dans des fichiers cpp

utiliser le langage C dans des fichiers cpp - C++ - Programmation

Marsh Posté le 03-02-2011 à 00:52:11    

Bonjour,
 
Je dois implémenter OpenSSL qui est écrit en C dans un stack non sécurisé écrit en C++. J'aimerais savoir comment dois-je faire pour cela. Je suis ( un faux ) débutant en C++ ( j'ai fait pas mal de C et de Java ).
Merci d'avance pour votre aide.

Reply

Marsh Posté le 03-02-2011 à 00:52:11   

Reply

Marsh Posté le 03-02-2011 à 16:18:03    

J'ai utilisé la méthode qui est expliquée ici : http://www.developpez.net/forums/d [...] ost5755120  pour voir un peu comment ca marche.
j'ai utilisé juste les trois premières fonctions citées dedans, car ce qu'il me faut pour l'instant c'est utiliser des fonctions C dans un fichier C++.
j'ai compilé le fichier C d'abord, puis j'ai compilé le tout avec g++. Voici le resultat :  
 

Code :
  1. gcc -c FonctionsC.c
  2. moi@moi-G73Jh:~/C_CPP$ g++ -Wall -o main main.cpp
  3. /tmp/ccnAp3YM.o: In function 'main':
  4. main.cpp:(.text+0xf): undefined reference to 'fonction1'
  5. main.cpp:(.text+0x41): undefined reference to 'fonction2'
  6. main.cpp:(.text+0x6e): undefined reference to 'fonction3'
  7. collect2: ld returned 1 exit status


 
Apparemment il n'a pas trouvé FonctionsC.o ...
 
Voici les codes :  
main.cpp :

Code :
  1. #include "FonctionsC.h"
  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. int main(void)
  6. {
  7. cout << "1: " << fonction1(2) << endl;
  8. cout << "2: " << fonction2("coucou" ) << endl;
  9. cout << "3: " << fonction3() << endl;
  10. return 0;
  11. }


 
FonctionsC.h :

Code :
  1. /* Définition de la macro EXTERN_C pour C ou C++ */
  2. #ifndef EXTERN_C
  3. #ifdef __cplusplus
  4. #define EXTERN_C extern "C"
  5. #else
  6. #define EXTERN_C
  7. #endif
  8. #endif
  9. /* Ces fonctions sont accessibles en C++,  
  10.    car le linker saura que ce sont des fonctions C. */
  11. EXTERN_C int fonction1(int);
  12. EXTERN_C int fonction2(char const *);
  13. EXTERN_C void * fonction3(void);


 
FonctionsC.c

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include "FonctionsC.h"
  4. int fonction1(int a)
  5. {
  6. return 2*a;
  7. }
  8. int fonction2(char const *s)
  9. {
  10. return puts(s);
  11. }
  12. void * fonction3(void)
  13. {
  14. return NULL;
  15. }


 
Est ce que c'est comme ça qu'on compile ? Je ne sais pas d'où vient le problème.

Reply

Marsh Posté le 03-02-2011 à 19:17:47    

Citation :

moi@moi-G73Jh:~/C_CPP$ g++ -Wall -o main main.cpp

Les fonctions C (qui je suppose sont dans un fichier indépendant), le linker il en a connaissance comment? Il lit directement ou les trouver dans l'esprit du développeur par télépathie quantique?
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-02-2011 à 23:22:55    

justement je ne sais pas comment lui indiquer comment recuperer les fonctions C.
je pensais qu'il lit par défaut dans le repertoire courant
D'ou ma question "Est ce que c'est comme ça qu'on compile ?"


Message édité par razuki le 03-02-2011 à 23:23:29
Reply

Marsh Posté le 04-02-2011 à 01:31:44    

Citation :

je pensais qu'il lit par défaut dans le repertoire courant

Ben non, un compilo c'est bête, faut lui faire compiler tous les fichiers accessoires avant, et quand on veut lui faire compiler l’exécutable final, il faut lui indiquer le nom des fichiers accessoires compilés. Il cherche pas tout seul les fichiers dans le répertoire courant, car il sait pas leur noms.
Dans ton cas, ce devrait être un truc du genre
oi@moi-G73Jh:~/C_CPP$ g++ -Wall -o main main.cpp  FilesC.o
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-02-2011 à 10:59:00    

D'acc, merci ca marche maintenant.

Reply

Sujets relatifs:

Leave a Replay

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