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

Autres éditeurs Discussion :

Mélanger des versions de gcc


Sujet :

Autres éditeurs

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut Mélanger des versions de gcc
    Hello,

    Je développe une lib qui elle-même fait appel à deux libs externes, qui sont bien évidemment compilées avec des versions différentes de gcc.

    Est-ce gênant ? Avec quelle devrais-je compiler ?

    Merci.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Bonjour,

    Si tu mélanges des versions de GCC, tu commences à mélanger des versions du runtime (en gros, la libc/STL/..., quand c'(est compilé), et c'est source de problèmes, parfois assez gênants, et assez durs à retrouver. Donc, tant que c'est possible, n'utilise qu'un seul et unique compilateur par app, sinon... Je plaide non coupable quand tu auras jeté ton PC par la fenêtre.

    Niveau solution, il ne reste que la recompilation de toutes les libs...

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Ce n'est pas vraiment une solution, puisque je suis tenu par les c* par les les développeurs des bibliothèques externes...

    Je crois qu'il en reste que le PC balancé par la fenêtre.

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    On peut mélanger (en partie) les runtimes, mais c'est effectivement une pente assez glissante...

    La seule solution (presque) fiable consiste à écrire une librairie d'encapsulation / isolation complète de l'une ou l'autre librairie (idéalement, les deux, vus qu'ils semblent peu réactifs). Cette encapsulation devra exposer une interface abstraite de TOUS les éléments issus de la CLib et/ou de la STL, et implémenter les fonctions d'allocation / libération pour TOUS les éléments dynamiques.

    En clair, cela veut dire par exemple :
    • Ces librairies d'encapsulation devront être au format SO / DLL.
    • Pour une fonction renvoyant un std::string, par exemple, tu exposeras un char* (et sa longueur) au niveau des fonctions.
      Tu fourniras dans un .H séparé une macro / template pour le "recomposer" en un std::string valide au niveau de l'application. Interdiction de le faire dans un code compilé dans la librairie d'abstraction.
      Ce principe est valable pour TOUS les containers STL.
    • L'application ne devra soit JAMAIS allouer les données ni les libérer, soit TOUJOURS les allouer ET les libérer. Aucun "mix" ne doit être fait, car le "free / delete" d'une version de GCC n'est pas forcément binairement compatible avec le "malloc / new" d'une autre version.
    • Tu devras passer par un format "portable" pour tout ce qui n'est pas directement issu de la plate-forme sur laquelle tu travailles.
    Alors OK, c'est faisable... Ceci étant dit, c'est une usine à gaz.

    Après, faudrait savoir ce que font ces librairies. Car tu peux peut-être déjouer tout ça si elles peuvent tourner dans d'autres processus, que tu pourrais interconnecter avec ton programme au travers d'une librairie comme ICE qui t'aidera à abstraire les éléments non-portables.
    Si tu dois absolument les avoir DANS ton processus, c'est mal barré sans passer par des librairies d'abstraction / isolation comme je te les ai décrites ci-dessus.

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/05/2011, 10h28
  2. Gestion des versions travail en équipe
    Par yanis97 dans le forum WinDev
    Réponses: 1
    Dernier message: 05/10/2004, 22h18
  3. Regle de nommage des versions
    Par Jay dans le forum Windows
    Réponses: 5
    Dernier message: 24/11/2003, 10h26

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