Я использую библиотеку из 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) библиотекой, которую я использую. Я не могу / не хочу перекомпилировать внешнюю библиотеку. Следовательно, необходимость исправить сообщения на моем конце.
visual-studio
visual-c++
linker
warnings
cgal
Ашвин Нанджаппа
источник
источник
/ignore:4099
отлично работает в Visual Studio 10 с C ++. Я получил предупреждениеLNK4099: PDB 'vc100.pdb' was not found with 'gtest_main-mdd.lib(gtest_main.obj)
и смог удалить его таким образом.Ответы:
Добавьте следующее в качестве дополнительной опции компоновщика:
Это в Properties-> Linker-> Command Line
источник
Обновление 2018-10-16
Как сообщается, с VS 2013 это предупреждение можно отключить. См. Комментарий @Mark Ransom.
Оригинальный ответ
Вы не можете отключить это конкретное предупреждение.
По словам Джеффа Чаппелла, предупреждение 4099 обрабатывается так, как будто его слишком важно игнорировать, даже при использовании вместе с / wx (который будет рассматривать предупреждения как ошибки и игнорировать указанное предупреждение в других ситуациях)
Вот соответствующий текст из ссылки:
источник
(Для записи и до того, как поток исчезнет на форумах msdn) Вы не можете отключить предупреждение (по крайней мере, в VS2010), потому что оно находится в списке предупреждений, которые нельзя отключить (поэтому / wd4099 не будет работать) , но вместо этого вы можете сделать патч link.exe (обычно C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ bin \ link.exe), чтобы удалить его из указанного списка. Я знаю, это похоже на отбойный молоток. Хотя это работает.
Например, если вы хотите удалить предупреждение для 4099, откройте link.exe с помощью шестнадцатеричного редактора, перейдите к строке 15A0, которая читает 03 10 (с прямым порядком байтов для 4099), и замените ее на FF 00 (которого не существует).
источник
Для пользы других я решил включить то, что сделал.
Поскольку вы не можете заставить Visual Studio (в моем случае 2010) игнорировать предупреждения LNK4204, мой подход заключался в том, чтобы дать ему то, что он хотел: файлы pdb. Поскольку в моем случае я использовал библиотеки с открытым исходным кодом, у меня уже есть код, создающий файлы pdb.
НО, по умолчанию все файлы PDF называются одинаково: в моем случае vc100.pdb. Поскольку вам нужен .pdb для каждого .lib, это создает проблему, особенно если вы используете что-то вроде ImageMagik, которое создает около 20 статических .lib-файлов. У вас не может быть 20 файлов lib в одном каталоге (на который компоновщик вашего приложения ссылается для компоновки в библиотеках) и все 20 файлов .pdb называться одинаково.
Мое решение заключалось в том, чтобы перестроить мои файлы статической библиотеки и настроить VS2010 на имя файла .pdb по отношению к ПРОЕКТУ. Таким образом, каждый .lib получает одноименный .pdb, и вы можете поместить все LIB и PDB в один каталог для использования в вашем проекте.
Итак, для конфигурации «Отладка» я отредактировал:
Свойства-> Свойства конфигурации -> C / C ++ -> Выходные файлы -> Имя файла базы данных программы из
$ (IntDir) $ VC (PlatformToolsetVersion) .pdb
быть следующим значением:
$ (OutDir) $ VC (PlatformToolsetVersion) D $ (ProjectName) .pdb
Теперь, а не где-то в промежуточном каталоге, файлы .pdb записываются в выходной каталог, где также записываются файлы .lib, И, что наиболее важно, они называются с суффиксом имени проекта D + . Это означает, что каждый проект библиотеки создает файл .lib проекта и отдельный файл .pdb проекта.
Теперь я могу скопировать все мои файлы .lib выпуска, мои файлы .lib отладки и файлы .pdb отладки в одно место в моей системе разработки, а проект, который использует эту стороннюю библиотеку в режиме отладки, имеет pdb файлы, необходимые в режиме отладки.
источник
Я подозреваю / игнорирую вариант VC6 link.exe. для компоновщика VS2005 и VS2008 нет доступной опции документированного / игнорирования, но компоновщик выглядит просто игнорирующим параметр "/ ignore: XXX", без ошибок и без эффекта.
источник
Файл PDB обычно используется для хранения отладочной информации. Это предупреждение вызвано, вероятно, тем, что файл
vc80.pdb
не найден при связывании целевого объектного файла. Прочтите запись MSDN на LNK4099 здесь .Кроме того, вы можете отключить создание отладочной информации в поле «Свойства проекта»> «Компоновщик»> «Отладка»> «Создать отладочную информацию».
источник
EDIT: не используйте vc80 / Visual Studio 2005, но на Visual Studio 2008 версии / vc90 библиотеки CGAL (возможно , из здесь ).
Предупреждение средств компоновщика LNK4099 :
источник
Вы не можете отключить предупреждение компоновщика 4099, как сказал @John Weldon.
Вам следует перестроить библиотеку с некоторыми изменениями конфигурации проекта. У вас есть несколько вариантов:
источник