Question

J'utilise une bibliothèque de CGAL qui, au cours de la phase de liaison de ma compilation de code, génère de nombreux avertissements de liaison de cette forme:

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 l'avertissement de l'é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é.

Était-ce utile?

La solution

Ajoutez les éléments suivants comme option de l'éditeur de liens supplémentaire:

 /ignore:4099

C’est dans Propriétés - > Éditeur de liens - > Ligne de commande

Autres conseils

Mise à jour 2018-10-16

À 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 d'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é mais pas nécessairement pris en compte. Si l'avertissement se produit   alors que l’option / wx n’est pas active, le message d’avertissement reste   s'affiche, mais si l'option / wx est active, l'avertissement est   ignoré. C’est comme si l’avertissement était jugé suffisamment important pour   remplacer une tentative de l'ignorer, mais pas si l'utilisateur a mis trop   prix é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

(Pour l’enregistrement 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 (de sorte que / wd4099 ne fonctionnera pas), mais vous pouvez plutôt appliquer le patch link.exe (généralement C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe) pour le supprimer de cette 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 (little endian pour 4099) et remplacez-la par FF 00 (qui n'existe pas. )

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

Comme vous ne pouvez pas obliger Visual Studio (2010 dans mon cas) à ignorer les avertissements 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, par défaut, tous les fichiers PDF sont nommés de la même manière: 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 les liens de votre application font référence dans les bibliothèques) et tous les 20 fichiers .pdb appelés la même chose.

Ma solution consistait à reconstruire mes fichiers de bibliothèque statiques et à configurer VS2010 pour nommer le fichier .pdb en fonction de 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 le " Debug " configuraton, j'ai édité:

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

$ (IntDir) vc $ (PlatformToolsetVersion) .pdb

doit ê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ù sont également écrits les fichiers .lib, ET plus important encore, ils sont nommés avec le suffixe D + nom du projet . Cela signifie que chaque bibliothèque projet génère un projet .lib et un fichier .pdb spécifique au projet.

Je peux maintenant copier tous mes fichiers .lib de version, mes fichiers de débogage .lib et les fichiers de débogage .pdb dans un emplacement de mon système de développement, ainsi que le projet utilisant cette bibliothèque tierce en mode débogage, a les fichiers pdb dont il a besoin en mode débogage.

Je soupçonne / ignore est une option de 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 simplement ignorer & "; ignorer: XXX &"; option, pas d'erreur et pas d'effet.

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 n’a pas été trouvé 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 des propriétés du projet > Lieur & Gt; Débogage & Gt; Générer le champ Informations de débogage.

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

Outils de l'éditeur de liens Avertissement LNK4099 :

  

Vous pouvez aussi compiler avec / Z7, donc   le pdb n'a pas besoin d'être utilisé, ou   supprimez l’option / DEBUG de l’éditeur de liens si vous   ne pas avoir de fichiers .pdb pour les objets   vous reliez.

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 que celui dans lequel vous enregistrez le fichier .lib. Définissez la valeur & Quot; $ (OutDir) $ (TargetName) .pdb & Quot; to Properties - > C / C ++ - > Fichiers de sortie-Nom du fichier de base de données du programme
  • Enregistrez les informations de débogage dans un fichier .lib. Valeur de réglage & Quot; C7 compatible (/ Z7) & Quot; to Properties - > C / C ++ - > General - > Format des informations de débogage
  • Désactive les informations de débogage de génération pour cette bibliothèque. Supprimer la valeur des propriétés - & Gt; C / C ++ - & Gt; Général - & Gt; Format des informations de débogage
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top