Compilation C/C++

LSmi -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je souhaiterai tout d'abord avoir une précision : j'ai un code qui comprends des fichiers C mais aussi C++, dois utiliser g++ pour compiler tous les fichiers, ou g++ pour les .cpp et gcc pour les .c ?

Car voilà l'erreur que j'obtiens à la compilation :

#g++ messageTest.o -o messageTest

Undefined first referenced symbol in file
Security_IF::Security_IF[in-charge](char const*, unsigned) messageTest.o
Security_IF::~Security_IF [in-charge]()messageTest.o


Le code de messageTest.cpp contient un
#include "Security_IF.h"
.

Mais aucun problème lors de la compilation de Security_IF.cpp.

Merci pour votre aide.
Configuration: Windows XP
Mozilla 1.7.5

3 réponses

  1. luffy duck
     
    Bonjour,

    Alors g++ compile également les fichier écrit en langage C, donc pas de soucis !

    Pour ton erreur, je ne suis pas spécialiste de g++ (loin de là d'ailleurs), mais ne dit-il pas que la variable in_charge n'est déclarée nulle part ?

    ++
    0
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    salut, en effet utilise g++ pour le cpp et gcc pour le c.
    Mais de manière générale, utilise gcc, qui normalement fait appel à g++ quand il tombe sur un .cpp.
    En revanche, ton problème n'est pas un problème de compilation, mais d'édition des liens.
    Il faut savoir que pour lier du C et du C++, il déclarer les fonctions C en C++ en ajoutant un extern "C" devant.
    0
    1. LSmi
       
      J'ai pourtant un :

      #ifdef __cplusplus
      extern "C" {
      #endif
      
      (mon code)
      
      #ifdef __cplusplus
      }
      #endif


      Sur tous mes fichiers .c, ce n'est pas suffisant ?
      0
    2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      heu...
      le extern "C" est à mettre dans les fichiers C++ qui appellent des fonctions C, pas l'inverse.
      Aprsè l'erreur viens peut être dautre chose, montre nous ta classe voir si ça ne viens pas de là.
      0
      1. LSmi > Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Par exemple losque je veux compiler le code suivant (fichier mainSecurity.cpp) :

        #include "Security_IF.h"
        #include <stdio.h>
        
        int main()
        {
        	const char * data = "AAAAAA";
        	unsigned int length = 6;
        	Security_IF security1(data, length);
        
        	printf("OK !\n");
          return 1;
        }


        Il me met l'erreur, par contre il n'y a pas de problème dès que j'enlève le
        Security_IF security1(data, length);


        Je compile comme ça :

        #g++ -W -Wall -ansi -pedantic -c mainSecurity.cpp
        #g++ -W -Wall -ansi -pedantic -c Security_IF.cpp
        #g++ -W -Wall -ansi -pedantic mainSecurity.o -o mainSecurity
        0
    3. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      ba voila, tout s'explique.
      en troisième ligne, tu lie mainSecuryti.o au librairies standard, et c'est tout, alors que ta fonction Security_IF security1(data, length); se trouve dans Security_IF.cpp, c'est normale qu'il ne la trouve pas !
      g++ -W -Wall -ansi -pedantic mainSecurity.o Security_IF.o -o mainSecurity
      à quoi sert de créer un .o si tu ne l'utilise pas ???
      0
  3. luffy duck
     
    arf... j'avais tout faux... et je ne peux même pas supprimer mon post...
    sorry pour le flood ^^
    0