138 votes

Visual C++ : Comment faire pour désactiver les avertissements de l’éditeur de liens spécifiques ?

J’utilise une bibliothèque de CGAL qui, au cours de l’étape relie de ma compilation de code produit beaucoup de jumeler mises en garde de ce formulaire :

Comment puis-je désactiver ce linker spécifique avertissement sous Visual c + c++ / Studio 2008 ?

Notez que je n’ai pas tout contrôle sur la bibliothèque (CGAL) externe dont je me sers. Je ne peux pas / ne veux pas entrer dans recompiler une librairie externe. Par conséquent, la nécessité de fixer les messages à ma fin.

125voto

Aaron Saarela Points 2605

Ajouter ce qui suit comme un complément de l'éditeur de liens option:

 /ignore:4099

C'est dans Propriétés->Linker->Ligne de Commande


Cet avertissement ne peut être ignoré, cependant, mais il semble y avoir une solution de contournement.

Vous pouvez utiliser /ignorer:4099 comme un éditeur de liens drapeau, mais il ya un hic. Malheureusement, Microsoft a décidé de faire 4099 un non-ignorable avertissement, donc, vous avez à patch link.exe. Les sons un peu fou, mais il ya tout simplement pas d'autre moyen. Plus de détails ici: bottledlight.com/docs/lnk4099.html j'ai utilisé comme HxD hex editor, et à la suite de la description sur la page en question a bien fonctionné avec VS10. L' la commande est toujours 4088, 4099, 4105. – Andreas Haferburg Fév 13 '12 à 14:59

51voto

John Weldon Points 19132

Vous ne pouvez pas désactiver l'avertissement spécifique.

Selon Geoff Chappell le 4099 avertissement est traitée comme si elle est trop important pour être ignoré, même en utilisant conjointement avec /wx (ce qui permettrait de traiter les avertissements d'erreurs et d'ignorer l'avertissement spécifié dans d'autres situations)

Voici le texte à partir du lien:

Pas Tout À Fait Unignorable Avertissements

Pour certains d'avertissement des nombres, de la spécification dans un /ignore option est accepté, mais ne sont pas nécessairement exécutées. Si l'avertissement se produire alors que la /wx option n'est pas active, le message d'avertissement est encore affiche, mais si l' /wx option est active, le message d'avertissement est ignoré. C'est comme si l'avertissement est considéré comme suffisamment important pour remplacer une tentative de l'ignorer, mais pas si l'utilisateur a mis trop haut prix sur unignored avertissements.

L'avertissement suivant les numéros sont affectés:

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237

10voto

Gurg Hackpof Points 373

(Pour l'enregistrement et avant que le fil disparaît sur les forums msdn) Vous ne pouvez pas désactiver l'avertissement (au moins sous VS2010) parce qu'il est sur la liste des mises en garde qui ne peut pas être désactivé (donc /wd4099 ne fonctionnera pas), mais ce que vous pouvez faire à la place est patch link.exe (généralement C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe pour le retirer de cette liste . Sonne comme un marteau-piqueur, je sais. Il fonctionne bien.

Par exemple, si vous souhaitez supprimer l'avertissement pour 4099, ouvrir link.exe avec un éditeur hexadécimal, aller à la ligne 15A0 qui se lit 03 10 (little endian pour 4099) et de le remplacer avec FF 00 (qui n'existe pas.)

8voto

Minok Points 113

Pour le bénéfice des autres, je pensais inclure ce que j'ai fait.

Puisque vous ne pouvez pas obtenir Visual Studio (2010 dans mon cas) pour ignorer la LNK4204 mises en garde, mon approche a été de lui donner ce qu'il voulait: les fichiers pdb. Comme je l'ai été à l'aide de bibliothèques open source dans mon cas, j'ai le code du bâtiment les fichiers pdb déjà.

MAIS, par défaut, le nom de tous les fichiers PDF même chose: vc100.apb dans mon cas. Comme vous avez besoin d'un .apb pour chacun et pour tous .lib, ce qui crée un problème, surtout si vous utilisez quelque chose comme ImageMagik, qui crée environ 20 statique .fichiers lib. Vous ne pouvez pas avoir 20 lib fichiers dans un répertoire de votre application à l'éditeur de liens de références de liaison dans les bibliothèques) et ont tous la 20 .fichiers pdb disant la même chose.

Ma solution a été d'aller et de reconstruire ma bibliothèque statique des fichiers, et de configurer VS2010, le nom de la .fichier pdb à l'égard du PROJET. De cette façon, chaque .lib obtient un même nom .apb, et vous pouvez mettre toutes les LIBs et Pdb dans un répertoire de votre projet.

Donc, pour le "Debug" configuraton, j'ai édité:

Propriétés->Propriétés de Configuration -> C/C++ -> Fichiers de Sortie -> Base de données du Programme de Nom de Fichier à partir de

$(IntDir)vc$(PlatformToolsetVersion).apb

pour avoir la valeur suivante:

$(OutDir)vc$(PlatformToolsetVersion)D$(ProjectName).apb

Maintenant, plutôt que quelque part dans le répertoire intermédiaire, l' .pdb fichiers sont écrits dans le répertoire de sortie, où l' .fichiers lib sont également en cours d'écriture, ET plus important encore, ils sont nommés avec un suffixe de D+nom du projet. Cela signifie que chaque bibliothèque de projet produduces un projet .lib et un projet spécifique .apb.

Je suis maintenant capable de copier tous de ma libération .fichiers lib, mon debug .fichiers lib et le débogage .pdb fichiers en un seul endroit sur mon système de développement, et le projet qui utilise cette 3ème partie de la bibliothèque en mode debug, a la pdb fichiers dont il a besoin dans le mode de débogage.

3voto

zhaorufei Points 626

Je soupçonne / ignorer est une option de link.exe VC6. pour VS2005 et du VS2008 linker il y a non documenté / ignorer option disponible, mais les regards de l’éditeur de liens ignorent simplement la « / ignorer : XXX » option, aucune erreur et aucun effet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X