Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité régulier
    Inscrit en
    octobre 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 27
    Points : 7
    Points
    7

    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 :
    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 Loïc Joly
    Développeur informatique
    Inscrit en
    août 2004
    Messages
    4 930
    Détails du profil
    Informations personnelles :
    Nom : Homme Loïc Joly
    Âge : 39
    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 : 4 930
    Points : 11 075
    Points
    11 075

    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.

  3. #3
    Invité régulier
    Inscrit en
    octobre 2009
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 27
    Points : 7
    Points
    7

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •