Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Bibliothèques
Bibliothèques Forum d'entraide sur les bibliothèques C++ : installation, utilisation. Avant de poster : Cours sur les bibliothèques C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/01/2012, 09h31   #1
Horin
Invité régulier
 
Inscription : 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.
Horin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 10h53   #2
JolyLoic
Rédacteur/Modérateur
 
Avatar de JolyLoic
 
Homme Loïc Joly
Développeur informatique
Inscription : août 2004
Messages : 4 675
Détails du profil
Informations personnelles :
Nom : Homme Loïc Joly
Âge : 38
Localisation : France

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

Informations forums :
Inscription : août 2004
Messages : 4 675
Points : 9 897
Points : 9 897
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.
JolyLoic est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/01/2012, 11h30   #3
Horin
Invité régulier
 
Inscription : octobre 2009
Messages : 27
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 27
Points : 7
Points : 7
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.
Horin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h55.


 
 
 
 
Partenaires

Hébergement Web