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

Bibliothèques C++ Discussion :

Conflit entre bibliothèques


Sujet :

Bibliothèques C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Points : 19
    Points
    19
    Par défaut Conflit entre bibliothèques
    Bonjour,

    Je suis confronté à un problème de conflit entre bibliothèques que je ne parviens pas à résoudre:

    J'ai deux fichiers ".lib" contenant toute une série de fonctions similaires mais comportant également des fonctions distinctes (il faut donc que les deux bibliothèques soient présentes).

    Néanmoins, lors de la compilation j'obtiens des erreurs pour les fonctions en commun :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    libpng.lib(pngerror.obj) : error LNK2005: _png_set_error_fn déjà défini(e) dans DragonFireSDK.lib(pngerror.obj)
    J'utilise Visual studio 2008.
    J'ai vu sur le net que cela pouvait se résoudre en modifiant les paramètres de la bibliothèque runtime (projet -> propriétés -> C/C++ -> génération de code) mais peu importe ce que je mets dans ce champ, les erreurs sont toujours là (juste le nombre d'erreurs qui varie).

    N'y a t il pas un moyen simple pour faire coexister mes deux bibliothèques sans avoir de conflit pour les fonctions communes ?

    Je vous remercie.

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Simple, je ne pense pas. Compliqué, probablement un peu plus.

    Si tu es certain que les symboles en commun sont bien identiques y compris dans leur implémentation, tu peux utiliser l'option du linker /FORCE:MULTIPLE. Attention, ça a le potentiel de tout faire merder de manière subtile si ce n'est pas le cas.

    Sinon, une idée pourrait être d'utiliser la bibliothèque A directement, et de créer une DLL qui utilise la bibliothèque B, et n'expose de B que les fonctions supplémentaires. De cette manière, le conflit devrait ne plus exister.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Merci,

    bien que mes erreurs disparaissent, j'ai des exceptions générées lors de l’exécution.
    Est-ce que cela signifie que les fonctions ne sont pas totalement implémentée de la même façon ?
    Il semblerait que mes 2 bibliothèques ont défini les mêmes fonctions mais avec un code différent. Donc il faudrait que chaque bibliothèque puisse accéder à sa propre fonction ... mais sans générer de conflit .. ?

    Je vais essayer de clarifier mon problème:

    J'utilise une première bibliothèque (OpenCV) composé de plusieurs fichier ".lib" dont un spécifique pour la gestion des fichiers ".png"

    J'utilise une deuxième bibliothèque qui ne contient qu'un seul ".lib"
    Les deux bibliothèques utilisent le format d'image ".PNG" pour fonctionner et le conflit intervient aux niveaux des fonctions de gestions des PNG (auxquelles je n'ai pas vraiment accès).

    Au départ j'utilisais OpenCV avec des bibliothèques dynamique (.DLL), tout fonctionnait sans le moindre problème.
    J'ai voulu par la suite utiliser des bibliothèques statiques et c'est à ce moment que les conflits sont apparus.
    Je ne sais pas si cela permet de clarifier la situation.

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/06/2014, 10h37
  2. Conflit entre 2 bibliothèques JS
    Par maxdel26 dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 02/05/2011, 07h54
  3. conflit entre bibliothèques
    Par snake264 dans le forum Visual C++
    Réponses: 4
    Dernier message: 31/05/2010, 17h00
  4. Conflit de noms entre bibliothèques
    Par oodini dans le forum C++
    Réponses: 3
    Dernier message: 14/08/2008, 14h51
  5. [Technique] Conflits entre plusieurs requêtes
    Par Neowile dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/03/2003, 09h37

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