Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
846 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  utiliser le langage C dans des fichiers cpp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

utiliser le langage C dans des fichiers cpp

n°2053922
razuki
Posté le 03-02-2011 à 00:52:11  profilanswer
 

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.

mood
Publicité
Posté le 03-02-2011 à 00:52:11  profilanswer
 

n°2054085
razuki
Posté le 03-02-2011 à 16:18:03  profilanswer
 

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.

n°2054127
gilou
Modérateur
Modzilla
Posté le 03-02-2011 à 19:17:47  profilanswer
 

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é!  --
n°2054173
razuki
Posté le 03-02-2011 à 23:22:55  profilanswer
 

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
n°2054193
gilou
Modérateur
Modzilla
Posté le 04-02-2011 à 01:31:44  profilanswer
 

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é!  --
n°2054278
razuki
Posté le 04-02-2011 à 10:59:00  profilanswer
 

D'acc, merci ca marche maintenant.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  utiliser le langage C dans des fichiers cpp

 

Sujets relatifs
[help] C# - API NetWORKS[c++] utiliser caméra Smartphone Windows Mobile 6
Tout sur FMOD en C[PIC/C] Pb Stack overflow
Modifier une source C++ pour projet Robotique[C] structure de taille variable ?
Utiliser un cache L1 de données comme un second cache L1 d'instructionScript de transfert automatique de fichiers
recrutement C/SDL[C] soustraire deux pointeurs
Plus de sujets relatifs à : utiliser le langage C dans des fichiers cpp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR