IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Compiler une library compatible C et C++.


Sujet :

C++

  1. #1
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut Compiler une library compatible C et C++.
    Salut les C++,

    je suis en train de reécrire une de mes library, écrit en C, et je souhaite la rendre compatible avec le C++.

    Que dois-je faire ?

    Car je peut la compiler avec g++ sous Linux mais dans ce cas la lier avec gcc ne fonctionne plus.

    Pouvez vous m'expliquer la marche a suivre si vous désirez bien m'aider car ce sujet n'est nullement mentionner dans mes nombreux books.

    Merci pour vos réponses et votre aide.

    Luke Spywoker.

    PS: je vais SFINY (Search the Fucking Information on the Net Yourself) en attendant vos réponses.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Normalement si son API est basée purement sur le C, tout ce que tu as à faire c'est éviter les mécanismes incompatibles avec C++ dans son interface (genre, conversion implicite de void*, ou identificateurs basés sur des mots-clés C++) et déclarer les fonctions extern "C" quand tu compiles en C++ pour que le linker sache quoi chercher.

    Généralement, on fait ça avec une macro:
    Code C/C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /*MaBibliothèque.h*/
    #ifndef EXTERN_C
    #ifdef __cplusplus
    #define EXTERN_C extern "C"
    #else
    #define EXTERN_C extern
    #endif
    #endif
     
    EXTERN_C int MaFonction(int, int);
    J'ai un post un peu plus complet ici, note qu'il n'est pas spécifiquement pour une bibliothèque.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Je vais essayer dès que possible, très explicite et informative ta réponse.

    Est-ce aussi facile que en théorie ?

    Je comptais utiliser un header (*.h) différents pour la compilation et pour l'utlisateur(s), ça peut poser des problèmes ?

    Merci pour ta réponse éclairées, merci beaucoup de m'avoir donner le tuyau.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Citation Envoyé par Luke spywoker Voir le message
    Je comptais utiliser un header (*.h) différents pour la compilation et pour l'utlisateur(s), ça peut poser des problèmes ?
    Évite d'avoir un header réservé à l'utilisation, ce ne sera que source de problèmes quand (je dis bien "quand" et non "si") tu oublieras de mettre à jour l'un après avoir modifié l'autre.

    Par contre, tu peux avoir un header inclus dans les deux cas (pour l'interface) et un header réservé à la compilation de ta bibliothèque (pour l'implémentation). L'important est que le header d'interface soit toujours inclus, pour éviter les problèmes de désynchronisation.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    En faite le header pour la compilation inclus des headers de quelques lignes spécifique a chaque dossier classé par thème.

    Et donc je vais simplement les développer en un seul (qui en inclus pas).

    Tu a raison ça peut être source de problème mais pour l'instant le projet est structuré comme ça...

    A suivre, quand je compilerai la library avec EXTERN_C.

  6. #6
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Cela fonctionne parfaitement, merci pour votre aide.

    J'ai compiler la library avec gcc et compiler mes code de démo d'utilisation de la library avec g++ sans problèmes.

    Il reste néanmoins quelques trucs a revoir, avant de pouvoir faire un building.

    Encore grand merci pour votre aide et vos réponses éclairées.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Développer / Compiler une library C++
    Par be_tnt dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 17/03/2006, 08h21
  2. [VB] COmment compiler une dll dans un exe (zlib.dll)
    Par Khrysby dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/11/2005, 12h10
  3. [Applet] Compiler une applet ?
    Par Bobsinglar dans le forum Applets
    Réponses: 6
    Dernier message: 30/06/2005, 18h06
  4. [debutant] importer une library
    Par stpere dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 10/08/2004, 17h35
  5. [Debutant(e)]Compiler une classe
    Par tscoops dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 27/05/2004, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo