2010-03-24 5 views
3

J'ai un ancien projet C++ compilé avec VC6.Conflit de liaison VC6

J'ai besoin de lier statiquement une nouvelle bibliothèque pour implémenter une nouvelle fonctionnalité.

Malheureusement, la nouvelle bibliothèque définit un symbole (c'est-à-dire _inflate) qui est déjà défini dans une bibliothèque statique précédemment liée.

Bien sûr, je ne peux pas me débarrasser de l'une ou l'autre bibliothèque, et bien sûr je n'ai pas accès au code source de la bibliothèque.

Y at-il un moyen d'éviter l'erreur de lieur (LNK2005)?

Répondre

3

Si vous savez que les deux versions de _inflate sont identiques, ou au moins "compatibles", vous pouvez utiliser le /FORCE:Multiple linker option pour forcer l'utilisateur à ignorer les conflits de noms.

Bien sûr, si un lien vers une version de ce code est "incompatible", cela pourrait provoquer un comportement indéfini.

+0

bien, j'ai pu compiler ... mais puisque je ne suis pas sûr de l'implémentation de _inflate je dois trouver une autre solution (peut-être dinamiquement lien l'un des deux). merci – Stefano

+1

L'approche la plus simple consiste à forcer un lien, puis tester le programme. Si votre programme n'appelle jamais directement ou indirectement _inflate, il n'y aura pas de problème. Si _inflate est appelé mais que l'implémentation est assez similaire (ou n'affecte pas l'état d'un autre programme), alors cela ne provoquera aucun effet indésirable (souvent, vous trouverez deux implémentations identiques dans des bibliothèques différentes). Si elle est appelée et est "incompatible", alors vous aurez probablement un échec massif et très évident. Donc, je vais essayer, et si tout fonctionne bien dans les tests, vous avez probablement une solution viable. –