Forum Programmation.c++ Edition des liens avec gcc

Posté par  .
Étiquettes : aucune
0
19
juin
2005
Bonjour,
je développe un petit programme sous linux mandrake 10.1 en utilisant le compilateur gcc.
Tant que je compilais du C tout allait bien. Les classes c++ que j'ai ajoutées compilent mais l'édition des liens ne marche pas.
J'utilise un fichier Makefile contenant la ligne mal menée lors de son appel :

psc1d: psc1d.cpp logger.o capture.o paquet.o
utile.olecture_parametre.o alerte.o cgestionnaire.o cemetteur.o
crecepteur.o cpdest.o cliste.o cpsource.o
$(CC) -o $@ $^ -lpcap


psc1d.cpp est le programme principal qui a besoin des fichiers objets décrits dans la liste (il n'en manque pas).
L'execution de cette ligne du Makefile donne :

/root/tmp/ccgGH0xh.o(.text+0x3d): In function `handler(int)':
: undefined reference to `log_str(char const*)'
...
cliste.o(.text+0x821): In function `cliste::erase()':
: undefined reference to `operatornew[](unsigned int)'
cliste.o(.eh_frame+0x12): undefined reference to
`__gxx_personality_v0'collect2: ld returned 1 exit status
make: *** [psc1d] Erreur 1


Y aurait-il des incompatibilités entre le C et le C++ au niveau de l'édition des liens?
j'ai modifié la ligne éditions des liens en rajoutant l'option -shared, Ce qui produit un executable affichant un joli segmentation fault!
Je ne suis pas plus avancé (surtout que le main ne contient aucune instruction!)
Une idée serait la bien venue, je suis perdu.
  • # incompatibilité de lien

    Posté par  . Évalué à 0.

    Salut,

    Tu peux essayer en compilant tout avec g++ ( mais je m'avances peut-être un peu ).

    Sinon dans les sources c++, il faudra indiquer quelles fonctions variables sont en c

    (
    #ifdef __cplusplus
    extern "C" {
    #endif
    //les trucs en c//

    #ifdef __cplusplus
    }
    #endif
    ) pour indiquer la marche à suivre .
    • [^] # Re: incompatibilité de lien

      Posté par  . Évalué à 1.

      Salut, pour ce qui est de g++, c'est égal.
      Je vais essayer avec les directives du préprocesseur,
      merci...
  • # CC ou CXX ?

    Posté par  (site web personnel) . Évalué à 2.

    Dans ton Makefile :

    $(CC) -o $@ $^ -lpcap

    Normalement, s'il y a du C++, il faut utiliser $(CXX), sinon, il faut ajouter -lsdtc++ (et ce n'est pas garanti que ça marche).
    • [^] # Re: CC ou CXX ?

      Posté par  . Évalué à 1.

      En fait, j'ai écrit le makefile directement à la main,
      derriere la variable $(CC) se cache gcc.
      j'essaierai l'ajout de la bibilothèque sdt.
      merci, pour le coup de main
      • [^] # Re: CC ou CXX ?

        Posté par  . Évalué à 1.

        oui, c'est ce qu'il te dit. Si c'est du C++, il faut utiliser $(CXX), pas $(CC).
    • [^] # Re: CC ou CXX ?

      Posté par  . Évalué à 1.

      salut,
      je m'étais un peu avancée en disant que de compiler avec g++, ça ne changeait rien. Ca change tout si je compile tout avec g++. J'ai un executable qui marche (pas comme je veux...).
      il me reste à intégrer des directives pour que le code C soit compris, je croise les doigts.

      mille merci à tous pour votre aide.

      Un truc qu'en même :
      La variable CXX a la valeur g++.
      Ce que je ne comprends pas, où se cache cette variable, puisque je ne l'ai pas déclarée ni initialisée? A t-elle un sens particulier?
      • [^] # Re: CC ou CXX ?

        Posté par  (site web personnel) . Évalué à 0.

        Ça fait partie des variables que le système déclare pour toi...

        En fait gcc est le compilater pour le C et UNIQUEMENT le C !!!
        En revanche g++ est le compilateur pour le C++, par extention il compile quand même le C car c'est très ressemblant (mais ça marche pas pour certains bout de code spécifiques)...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.