web-dev-qa-db-fra.com

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

J'utilise une bibliothèque de CGAL qui, lors de la création de liens dans la compilation de mon code, génère de nombreux avertissements de liens de ce type:

warning LNK4099: PDB 'vc80.pdb' was not found with 'gmp-vc80-mt-sgd.lib' or at 'vc80.pdb'; linking object as if no debug info

Comment désactiver cet avertissement d'éditeur de liens spécifique sous Visual C++/Studio 2008?

Notez que je n’ai aucun contrôle sur la bibliothèque externe (CGAL) que j’utilise. Je ne peux pas/ne veux pas entrer dans la recompilation de la bibliothèque externe. D'où la nécessité de corriger les messages de mon côté.

114
Ashwin Nanjappa

Ajoutez ce qui suit comme option de lieur supplémentaire:

 /ignore:4099

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

97
Aaron Saarela

Mise à jour 2018-10-16

Apparemment, à partir de VS 2013, cet avertissement peut être désactivé. Voir le commentaire de @Mark Ransom.

Réponse originale

Vous ne pouvez pas désactiver cet avertissement spécifique.

Selon Geoff Chappell , l'avertissement 4099 est traité comme s'il était trop important de l'ignorer, même en utilisant conjointement avec/wx (qui traiterait les avertissements comme des erreurs et ignorerait l'avertissement spécifié dans d'autres situations)

Voici le texte pertinent du lien:

Avertissements non négligeables

Pour certains numéros d’avertissement, la spécification dans une option/ignore est acceptée mais n’est pas nécessairement prise en compte. Si l'avertissement se produit alors que l'option/wx n'est pas active, le message d'avertissement reste affiché, mais si l'option/wx est active, l'avertissement est ignoré. C'est comme si l'avertissement était jugé suffisamment important pour annuler une tentative de l'ignorer, mais pas si l'utilisateur a mis un prix trop élevé sur les avertissements non ignorés.

Les numéros d'avertissement suivants sont concernés:

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

(Pour mémoire et avant que le fil ne disparaisse sur les forums msdn) Vous ne pouvez pas désactiver l'avertissement (du moins sous VS2010) car il figure dans la liste des avertissements qui ne peuvent pas être désactivés (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 supprimer de ladite liste. On dirait un marteau-piqueur, je sais. Cela fonctionne bien.

Par exemple, si vous souhaitez supprimer l'avertissement pour 4099, ouvrez link.exe avec un éditeur hexadécimal, passez à la ligne 15A0 indiquant 03 10 (petit indicateur pour 4099) et remplacez-le par FF 00 (qui n'existe pas.)

10
Gurg Hackpof

Pour le bénéfice des autres, je pensais inclure ce que je faisais.

Comme vous ne pouvez pas obtenir que Visual Studio (2010 dans mon cas) ignore les avertissements du LNK4204, mon approche consistait à lui donner ce qu'il voulait: les fichiers pdb. Comme j'utilisais des bibliothèques open source dans mon cas, j'ai déjà le code qui construit les fichiers pdb.

MAIS, le défaut est de nommer tous les PDF fichiers identiques): vc100.pdb dans mon cas. Comme vous avez besoin d’un fichier .pdb pour chaque fichier .lib, cela crée un problème, en particulier si vous utilisez quelque chose comme ImageMagik, qui crée environ 20 fichiers .lib statiques. Vous ne pouvez pas avoir 20 fichiers lib dans un répertoire (auquel l’éditeur de liens de votre application fait référence dans les bibliothèques) et tous les 20 fichiers .pdb appelés même chose.

Ma solution consistait à reconstruire mes fichiers de bibliothèque statiques et à configurer VS2010 pour nommer le fichier .pdb par rapport à PROJECT. Ainsi, chaque fichier .lib reçoit le même nom de fichier .pdb et vous pouvez placer tous les fichiers LIB et PDB dans un répertoire que votre projet utilisera.

Donc pour la configuration "Debug", j'ai édité:

Propriétés-> Propriétés de configuration -> C/C++ -> Fichiers de sortie -> Nom de fichier de la base de données du programme de

$ (IntDir) vc $ (PlatformToolsetVersion) .pdb

être la valeur suivante:

$ (OutDir) vc $ (PlatformToolsetVersion) D $ (NomProjet) .pdb

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

Je suis maintenant en mesure de copier tous mes fichiers .lib de publication, mes fichiers de débogage .lib et les fichiers de débogage .pdb dans un seul emplacement de mon système de développement, et le projet qui utilise cette bibliothèque tierce en mode débogage a fichiers dont il a besoin en mode débogage.

8
Minok

Je soupçonne/ignore est une option VC6 link.exe. Pour l'éditeur de liens de VS2005 et VS2008, aucune option documentée/ignorer n'est disponible, mais l'éditeur de liens semble ignorer simplement l'option "/ ignorer: XXX", aucune erreur ni aucun effet.

3
zhaorufei

Vous ne pouvez pas désactiver l'avertissement d'éditeur de liens 4099, comme l'a dit @John Weldon.

Vous devez reconstruire la bibliothèque avec certaines modifications de la configuration du projet. Vous avez plusieurs options:

  • Enregistrer le fichier PDB avec les informations de débogage est le même dossier où vous enregistrez le fichier .lib. Définissez la valeur "$ (OutDir) $ (TargetName) .pdb" sur Propriétés-> C/C++ -> Fichier de base de données du programme de sortie Nom du fichier
  • Enregistrer les informations de débogage dans un fichier .lib. Définissez la valeur "C7 compatible (/ Z7)" sur Propriétés-> C/C++ -> Général-> Format des informations de débogage
  • Désactiver les informations de débogage de génération pour cette bibliothèque. Supprimer la valeur de Propriétés-> C/C++ -> Général-> Format des informations de débogage
1
KindDragon

Le fichier PDB est généralement utilisé pour stocker des informations de débogage. Cet avertissement est probablement dû au fait que le fichier vc80.pdb est introuvable lors de la liaison du fichier objet cible. Lisez l'entrée MSDN sur LNK4099 ici .

Vous pouvez également désactiver la génération d'informations de débogage à partir du champ Propriétés du projet> Éditeur de liens> Débogage> Générer des informations de débogage.

1
dirkgently

EDIT: n'utilisez pas vc80/Visual Studio 2005, mais les versions Visual Studio 2008/vc90 de la bibliothèque CGAL (peut-être deici ).

Avertissement des outils de liens LNK4099 :

Vous pouvez également compiler avec/Z7, vous n'avez donc pas besoin d'utiliser pdb, ou supprimez l'option de l'éditeur de liens/DEBUG si vous ne disposez pas de fichiers .pdb pour les objets que vous liez.

1
ax.