[RESOLU] compiler sources c et c++ avec autoconf/automake

compiler sources c et c++ avec autoconf/automake [RESOLU] - C++ - Programmation

Marsh Posté le 22-04-2005 à 14:08:43    

Salut,
 
J'utilise les outils de génération de makefile automatiques: autoconf et automake.
Je dois compiler plusieurs sources avec g++. Le seul problème est que lors de l'appel d'automake, il veut absolument que je donne à mon fichier configure.in la commande demandant le compilateur GCC car j'ai un .c dans mon prog qui doit être utiliser avec g++ pour le bon fonctionnement de mon programme.
 
Sauriez-vous si il existe une macro ou une option à mettre dans l'un de mes fichiers pour "forcer" la compilation avec G++???
 
Voici mon code:
 
Fichier configure.in:
AC_INIT(main.cpp)
AM_INIT_AUTOMAKE(blabla, 1.0)
AC_PROG_CXX
AC_PROG_CXXCPP
AC_PROG_RANLIB
AC_OUTPUT(Makefile)
 
 
Merci d'avance ;)


Message édité par SSeb31 le 20-05-2005 à 16:59:51
Reply

Marsh Posté le 22-04-2005 à 14:08:43   

Reply

Marsh Posté le 22-04-2005 à 14:49:22    

Voici le message d'erreur:
/usr/share/automake-1.9/am/depend2.am: am__fastdepCC does not appear in AM_CONDITIONAL
Makefile.am: C source seen but 'CC' is undefined
Makefile.am:  
Makefile.am: The usual way to define 'CC' is to add 'AC_PROG_CC'
Makefile.am: to 'configure.in' and run 'autoconf'again

Reply

Marsh Posté le 20-05-2005 à 16:36:10    

Bon, j'ai réussit à faire ce que je voulait faire ;=)
Je me donnes donc la réponse à moi-même sans aucune pretentio aucune
 
En fait, il suffit de compiler les .c avec gcc et les .cpp avec g++.
La solution réside ailleurs.
Dans mon cas, je veux utiliser des fonctions c dans cu c++.
 
Je dois donc permettre à mon code c++ de "reconnaitre" les fonctions c. Pour cela, je dois mettre les fonctions c dans un secteur memoire qui pourra etre lu autant par les librairies c que par les librairies c++.
Pour se faire, je dois "encadrer" les declaration du .h de mes fonctions c par:
               extern "C"{
                    ...declarations
                    void lala();
                    ...
               }
 
Maintenant, je me trouves dans la situation suivante: le lieu de la memoire (extern)"C" reconnait mes fonctions c. Mais, si on essaie de compiler du code c++ en n'incluant que l'interface .h des fonctions c, g++ ne trouve pas ces fonctions.
 
Le deuxieme point consiste donc à donner le lien correspondant à g++.
Cela se passe dans les .cpp qui utilisent les fonctions c
Avant toute implémentation des constructeurs ou autres, il faut "déclarer" les liens vers les fonctions c. Cela se fait de la manière suivante:
 
               #include ...
 
               extern "C" void lala();
 
               ... Implementation des fonctions c++ ...
 
 
Une fois cela fait, les outils automake et autoconf pourront etre utiliser comme decrit precedemment.
 
 
Autre chose, on peut aussi utiliser cette feinte afin de reconnaitre un objet déclaré dans un main, dans un interface. Toujours sympa à savoir, quand on veut dissocier une interface d'un main.
 
Bon, en espérant que cela pourra servir à d'autres.
 
++

Reply

Marsh Posté le 12-08-2013 à 14:55:00    

Très vieux sujet, mais je réponds quand même. Pour compiler du C et du C++ avec g++, tu utilises AC_PROG_CC([g++]) pour forcer le compilateur et AC_PROG_CXX. Ensuite tu utilises extern C

Reply

Sujets relatifs:

Leave a Replay

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