Visual C++: как отключить определенные предупреждения компоновщика?



Я использую библиотеку из CGAL, которая на этапе компоновки моего кода создает множество предупреждений о связывании этой формы:



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


Как отключить это конкретное предупреждение компоновщика в Visual C++ / Studio 2008?



обратите внимание, что у меня нет никакого контроля над внешней (CGAL) библиотекой, которую я использую. Я не могу/не хочу перекомпилировать внешнюю библиотеку. Следовательно, необходимо исправить сообщения на моем конце.

1003   8  

8 ответов:

добавить следующее в качестве дополнительной опции компоновщика:

 /ignore:4099

это в свойствах - > Компоновщик - > Командная строка

вы не можете отключить конкретные предупреждения.

по данным Джефф Чеппел предупреждение 4099 обрабатывается так, как будто его слишком важно игнорировать, даже используя в сочетании с /wx (который будет рассматривать предупреждения как ошибки и игнорировать указанное предупреждение в других ситуациях)

вот соответствующий текст из ссылки:

Не Совсем Неприличные Предупреждения

для некоторых предупреждающих номеров, спецификация в опции / ignore является принято, но не обязательно действует. Если возникает предупреждение в то время как параметр /WX не активна, то предупреждение все равно отображается, но если параметр /wx активен, то предупреждение игнорируемый. Это как если бы предупреждение считалось достаточно важным, чтобы переопределите попытку игнорировать его, но не если пользователь тоже поставил высокая цена на непризнанные предупреждения.

следующий номер предупреждение пострадавших:

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

(для записи и до того, как поток исчезнет на форумах msdn) Вы не можете отключить предупреждение (по крайней мере, в VS2010), потому что оно находится в списке предупреждений, которые не могут быть отключены (поэтому /wd4099 не будет работать), но вместо этого вы можете сделать patch link.exe (обычно C:\Program файлы (x86)\Microsoft Visual Studio 10.0\VC\bin\link.exe), чтобы удалить его из указанного списка . Звучит как отбойный молоток, я знаю. Но это работает.

например, если вы хотите снять предупреждение для 4099, откройте ссылку.exe с шестнадцатеричным редактором, goto line 15A0 который читает 03 10 (little endian for 4099) и заменяет его на FF 00 (который не существует.)

для пользы других, я бы включил то, что я сделал.

поскольку вы не можете заставить Visual Studio (2010 в моем случае) игнорировать предупреждения LNK4204, мой подход состоял в том, чтобы дать ему то, что он хотел: файлы pdb. Поскольку я использовал библиотеки с открытым исходным кодом в моем случае, у меня уже есть код, создающий файлы pdb.

но по умолчанию все файлы PDF называются одинаково: vc100.pdb в моем случае. Как вам нужно .pdb для каждого .Либ, это создает проблема, особенно если вы используете что-то вроде ImageMagik, который создает около 20 статических .lib-файлы. Вы не можете иметь 20 lib-файлов в одном каталоге (который ссылки компоновщика вашего приложения на ссылку в библиотеках) и иметь все 20 .pdb-файлы называются так же.

мое решение состояло в том, чтобы пойти и перестроить мои статические файлы библиотеки и настроить VS2010 для имени .pdb файл относительно проекта. Сюда, каждый .lib получает аналогичное имя .pdb, и вы можете положить все либы и файлы в одном каталоге для вашего проекта, чтобы использовать.

Итак, для конфигурации "Debug" я отредактировал:

Свойства - > Свойства Конфигурации - > C / C++ - > Выходные Файлы - > Имя Файла Базы Данных Программы С

$(IntDir) vc$(PlatformToolsetVersion).ГКБ

иметь следующее значение:

$(OutDir)vc$(PlatformToolsetVersion) D$(ProjectName).ГКБ

сейчас, а не где-то в промежуточный каталог, the .pdb-файлы записываются в каталог, где .lib файлы также пишутся, и самое главное, они называются с суффиксом D+название проекта. Это означает, что каждая библиотека проект продуцирует проект .lib и конкретный проект .распределительная плата.

теперь я могу скопировать весь мой релиз .lib файлы, моя отладка .lib-файлы и отладки .pdb-файлы в одном месте в моей системе разработки и проект, который использует эта сторонняя библиотека в режиме отладки имеет файлы pdb, которые ей нужны в режиме отладки.

Я подозреваю, что / ignore-это ссылка VC6.вариант exe-файла. для компоновщика VS2005 и VS2008 нет задокументированной опции /ignore, но компоновщик выглядит просто игнорирующим опцию "/ignore: XXX", без ошибок и без эффекта.

файл PDB обычно используется для хранения отладочной информации. Это предупреждение вызвано, вероятно, потому, что файл vc80.pdb не найден при связывании целевого объектного файла. Прочитайте запись MSDN на LNK4099 здесь.

кроме того, можно отключить генерацию отладочной информации в поле свойства проекта > Компоновщик > отладка > создать отладочную информацию.

EDIT: не используйте vc80 / Visual Studio 2005, Но версии Visual Studio 2008 / vc90 библиотеки CGAL (возможно Сздесь).

Linker Tools предупреждение LNK4099:

вы также можете скомпилировать с /Z7, так что pdb не нужно использовать, или удалите параметр компоновщика /DEBUG, если вы не имею .pdb файлы для объектов вы связываете.

вы не можете отключить предупреждение компоновщика 4099, как сказал @John Weldon.

вы должны перестроить библиотеку с некоторыми изменениями конфигурации проекта. У вас есть несколько вариантов:

  • сохранить PDB-файл с отладочной информацией - это та же папка, в которой вы сохраняете .файла lib. Установите значение " $(OutDir)$(TargetName).pdb " в свойства - >C / C++ - > выходные файлы-имя файла базы данных программы
  • сохранить отладочную информацию в .файла lib. Установите значение "C7 compatible (/Z7)" в Свойства - >C / C++ - > Общие - > Формат Отладочной Информации
  • отключить генерацию отладочной информации для этой библиотеки. Удалить значение из свойства - >C / C++ - >общие - > формат отладочной информации

Comments

    Ничего не найдено.