Forum Programmation.c Accéder à une bibliothèque C++ à partir de C

Posté par  (site web personnel) .
Étiquettes : aucune
0
8
août
2005
J'ai un programme en C (et je ne peux pas le compiler en C++. Il sagit en fait d'une extension à un programme C) qui doit accéder à une bibliothèque écrite en C++.

D'un coté, j'ai mon fichier objet écrit en C++, compilé avec g++ qui permet d'utiliser la bibliothèque C++ à travers plusieurs fonctions.

D'un autre coté, j'ai mon fichier objet écrit en C, compilé avec g++ qui doit avoir accès aux fonctions du fichier objet c++.

Comment faire ?

Et je sais que c'est possible. (un binding de QT a été fait)
En fait, il sagit d'écrire un binding au language lua (écrit en C) pour la bibliothèque Ogre (écrite en C++). Il existe un programme: tolua++ qui permet de générer des fonctions que lua peut utiliser et qui permettent d'utiliser les objets C++.
Seulement je ne sais pas comment faire

Merci.

lua: http://lua.org(...)
tolua++: http://www.codenix.com/~tolua/(...)
  • # Pourquoi ne peux-tu pas compiler en C++ ?

    Posté par  . Évalué à 2.

    Le C++ est un surensemble de C.. Il est donc parfaitement possible de compiler avec un compilateur C++ un programme écrit en C. Le contraire n'étant, évidemment pas vrai.

    Une petite restriction toutefois le casting de type C:
    (type)variable

    provoque un warning.
    • [^] # Re: Pourquoi ne peux-tu pas compiler en C++ ?

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

      > Le C++ est un surensemble de C.

      Justement, non. L'exemple le plus simple, c'est :

      int main () {
      int class = 0;
      return class;
      }

      qui compile en C mais pas en C++, mais il y a aussi des tas d'autres incompatibilités plus subtiles. Pour un programme relativement gros, si personne n'a fait attention à la compatibilité C++, il y a peu de chances que le programme C compile en C++.

      Pour appeler du C depuis le C++, c'est assez simple:

      extern "C" {
      #include "mon-en-tête-c.h"
      }

      (ou mieux, ajouter le 'extern "C"' dans mon-en-tête-c.h, protégé avec des #ifdef __cplusplus). Ça te demande que le .h compile en C++, mais pas forcément le .c.

      Dans l'autre sens, il faut en général ajouter des wrappers pour toutes les fonctions C++ que tu veux utiliser, et les déclarer 'extern "C"'.
    • [^] # Re: Pourquoi ne peux-tu pas compiler en C++ ?

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

      Je ne peux pas compiler en C++ car je dois faire un plugin C pour une application C: le language lua
      Et comme je veux que mon plugin fonctionne sur tous les interpréteurs lua (et pas seulement le mien que j'aurai compilé avec g++), je ne veux pas compiler en c++

Suivre le flux des commentaires

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