Visual Studio 2010 de la bibliothèque de la liaison de commande
Comment spécifier, dans Visual Studio 2010, l'ordre dans lequel les fichiers de la bibliothèque doit être lié?
J'ai un projet qui est lié à libexpat et contre une autre bibliothèque. Cette bibliothèque (pas sous mon contrôle) semble également inclure libexpat. Le problème est que "nous" utiliser une autre version de la bibliothèque (XML_UNICODE vs non). Dans Visual Studio 2008, les choses semblent travailler sur ok (ce qui pourrait avoir été une coïncidence), mais dans Visual Studio 2010 le mauvais exemple de libexpat est lié. Je pensais que si je pouvais spécifier l'ordre dans lequel ces deux bibliothèques doivent être liés et puis j'ai pu contourner le problème.
OriginalL'auteur Randy Voet | 2010-05-04
Vous devez vous connecter pour publier un commentaire.
Y A quelques années, j'ai découvert un hack qui permet à la force de Visual C++ pour les bibliothèques de liens avec une priorité spécifique. Ce n'est pas très élégant, mais il est fonctionnel.
Il semble que l'éditeur de liens pour Visual C++ génère l'ordre des liens à la volée fondée sur le symbole de dépendances. En ajoutant un symbole de référence à l'avant, vous pouvez forcer l'éditeur de liens à inclure la première bibliothèque spécifié dans l'éditeur de liens d'entrée. Veuillez noter, j'ai uniquement testé avec Visual C++ 6 et 8 (2005).
Par exemple, disons que vous avez deux bibliothèques avec le symbole XML_ParserCreate:
Tout d'abord, l'ordre de vos dépendances de la bibliothèque que vous attendez, libexpat.lib puis someother.lib. Via la ligne de commande, ce seraient des options pour
link.exe
. Dans Visual Studio 2005, ils seraient des options dans le cadre du projet de Propriétés de Configuration -> Linker -> Input -> Dépendances Supplémentaires. J'imagine que Visual C++ 2010 a le même menu.Ensuite, ajoutez une option de ligne de commande qui définit un connu répété symbole à l'avant, à l'aide de la /INCLUDE option de l'éditeur de liens. Dans Visual Studio 2005, ce peut être ajouté dans le cadre du projet de Propriétés de Configuration -> Linker -> en Ligne de Commande -> options Supplémentaires:
La définition de ce symbole de la cause à l'éditeur de liens immédiatement préfère la première bibliothèque qui se termine (réalise). En général, Visual C++ génère une erreur avec la répétition des symboles; si vous ne l'avez pas déjà fait, assurez-vous que vous spécifiez également le /FORCE:PLUSIEURS option de l'éditeur de liens.
Mon besoin spécifique pour ce a l'aide de la La DOUMA d' mémoire de débogage de la bibliothèque. Il définit une variété de fonctions de la mémoire qui sont également définies dans libcmtd.lib. La suite de manière incorrecte lien libcmtd version de _malloc, malgré un ordre de la bibliothèque, qui semble au contraire:
Cela a été résolu en ajoutant manuellement le symbole, et a travaillé de manière fiable pendant des années:
OriginalL'auteur Terrance
J'ai trouvé une " solution: si vous ajoutez des bibliothèques par
#pragma comment(lib...
l'ordre de liaison est le même que l'ordre dans lequel vous tapez ceux de pragma. Je suis toujours maintenir ouverte la question d'une solution lorsque les bibliothèques sont ajoutés à travers le fichier de projet plutôt que par pragma consolidés.OriginalL'auteur Randy Voet
Vous pouvez créer une DLL avec la troisième partie de la bibliothèque et de le lier à l'encontre de la version statique des expatriés dont il a besoin et ensuite le lien de votre code par rapport à la version d'expatrié vous avez besoin.
Cependant, le fait qu'il a travaillé avant pourrait signifier qu'une bibliothèque dispose de toutes les fonctionnalités de l'autre, plus quelques frais supplémentaires. Je ne connais pas les détails de l'expatrié. Si c'est le cas, vous devez vous assurer que vous n'avez que la version que vous souhaitez utiliser dans votre chemin de recherche des bibliothèques. Un autre répertoire de recherche de l'ordre dans l'autre version du compilateur pourrait expliquer le changement de comportement.
OriginalL'auteur janm
Je pense que vous pouvez modifier l'ordre dans lequel les fichiers de la bibliothèque sont liés bij de les ajouter dans le fichier de projet dans l'éditeur de liens -> input -> d'autres dépendances. Les fichiers de bibliothèque seront liés dans l'ordre dans lequel ils sont indiqués.
OriginalL'auteur vmb100