J'utilise une bibliothèque de CGAL qui, pendant la phase de liaison de ma compilation de code, produit 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 cet 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 / ne veux pas recompiler la bibliothèque externe. D'où la nécessité de corriger les messages de ma part.
visual-studio
visual-c++
linker
warnings
cgal
Ashwin Nanjappa
la source
la source
/ignore:4099
fonctionne correctement dans Visual Studio 10 avec C ++. J'ai reçu l'avertissementLNK4099: PDB 'vc100.pdb' was not found with 'gtest_main-mdd.lib(gtest_main.obj)
et j'ai réussi à le supprimer de cette façon.Réponses:
Ajoutez ce qui suit comme option supplémentaire de l'éditeur de liens:
C'est dans Propriétés-> Linker-> Ligne de commande
la source
Mise à jour 16/10/2018
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 pour être ignoré, même en l'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:
la source
(Pour mémoire et avant que le fil ne disparaisse sur les forums msdn) Vous ne pouvez pas désactiver l'avertissement (au moins sous VS2010) car il est sur 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, c'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. Cela ressemble à un marteau-piqueur, je sais. Cela fonctionne cependant.
Par exemple, si vous souhaitez supprimer l'avertissement pour 4099, ouvrez link.exe avec un éditeur hexadécimal, allez à la ligne 15A0 qui lit 03 10 (petit boutien pour 4099) et remplacez-le par FF 00 (qui n'existe pas).
la source
Pour le bénéfice des autres, je pensais inclure ce que j'ai fait.
Puisque vous ne pouvez pas faire en sorte que Visual Studio (2010 dans mon cas) ignore les avertissements LNK4204, mon approche était de 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 de construction des fichiers pdb.
MAIS, la valeur par défaut est de nommer tous les fichiers PDF de la même manière: vc100.pdb dans mon cas. Comme vous avez besoin d'un .pdb pour chaque .lib, cela crée un problème, surtout 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 renvoie dans les bibliothèques) et avoir tous les 20 fichiers .pdb appelés la même chose.
Ma solution était d'aller reconstruire mes fichiers de bibliothèque statiques, et de configurer VS2010 pour nommer le fichier .pdb par rapport au PROJET. De cette façon, chaque .lib obtient un .pdb nommé de manière similaire, et vous pouvez placer tous les LIB et PDB dans un répertoire pour que votre projet les utilise.
Donc pour la configuration "Debug", j'ai édité:
Propriétés-> Propriétés de configuration -> C / C ++ -> Fichiers de sortie -> Nom du fichier de la base de données du programme à partir de
$ (IntDir) vc $ (PlatformToolsetVersion) .pdb
être la valeur suivante:
$ (OutDir) vc $ (PlatformToolsetVersion) D $ (ProjectName) .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 surtout, ils sont nommés avec un suffixe de nom de projet D + . Cela signifie que chaque projet de bibliothèque produit un projet .lib et un .pdb spécifique au projet.
Je suis maintenant en mesure de copier tous mes fichiers .lib de version, mes fichiers de débogage .lib et les fichiers de débogage .pdb en un seul endroit sur mon système de développement, et le projet qui utilise cette bibliothèque tierce en mode débogage a le pdb fichiers dont il a besoin en mode débogage.
la source
Je soupçonne / ignore est une option VC6 link.exe. pour l'éditeur de liens VS2005 et VS2008, il n'y a pas d'option documentée / ignorer disponible, mais l'éditeur de liens semble ignorer simplement l'option "/ ignore: XXX", aucune erreur et aucun effet.
la source
Le fichier PDB est généralement utilisé pour stocker les 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 les informations de débogage.
la source
EDIT: n'utilisez pas vc80 / Visual Studio 2005, mais les versions Visual Studio 2008 / vc90 de la bibliothèque CGAL (peut-être à partir d' ici ).
Avertissement des outils Éditeur de liens LNK4099 :
la source
Vous ne pouvez pas désactiver l'avertissement 4099 de l'éditeur de liens, comme l'a dit @John Weldon.
Vous devez reconstruire la bibliothèque avec quelques modifications de configuration du projet. Vous avez plusieurs options:
la source