Visual Studio .NET 2003 - игнорировать специальную библиотеку для libcmt против libcmtd
У меня есть шаблон проекта VS .NET 2003, который коллеги копируют и настраивают при разработке своего программного обеспечения.
Похоже, что шаблон был изменен некоторое время назад, чтобы в свойстве IgnoreSpecificLibrary был файл libcmt.lib как для выпуска, так и для отладки (т. Е. Как для выпуска, так и для отладки, сборка должна игнорировать libcmt.lib в компоновщике).
Некоторые проекты, основанные на этом, были с тех пор построены, при этом сборка релиза тянет в libcmtd.lib (очевидно, просматривая файл.map проекта), что, похоже, вызывает некоторые проблемы во время выполнения (то есть диалоговое окно вспыхивает, как будто точка останова). был установлен).
Делает ли установка IgnoreSpecificLibrary для исключения libcmt.lib автоматически сделать ссылку проекта на libcmtd.lib?
Что странно, так это то, что сборка шаблона (с неправильной настройкой) ссылается на libcmt.lib, тогда как некоторые из настроенных проектов (хотя и не все) ссылаются на libcmtd.lib.
Есть идеи?
2 ответа
Это то, что произошло:
После компиляции компоновщик берет ваши объектные файлы и создает среди прочих таблицу символов, в которой есть symol-запрос, который не был заполнен. Затем компоновщик просматривает ваш список библиотек, пытаясь найти эти невыполненные символы. Так как вы игнорируете libcmt.lib, ваша сторонняя библиотека оставила или добавила некоторые неразрешенные символы и содержит запрос компоновщика для разрешения их из licmtd.lib (и, возможно, других библиотек), поскольку она была скомпилирована с параметром отладки.
Если бы вы не проигнорировали libcmt.lib, эти символы, скорее всего, были бы разрешены с помощью libcmt.lib, и не было необходимости извлекать что-то из libcmtd.lib (даже несмотря на то, что это нужно для разрешения других символов, которые все еще не выполнены)
Вы также можете попробовать igmore libcmtd.lib. Если вы теперь получили unresolvd externals, то было бы неплохо проигнорировать libcmt.dll.
Многие проекты игнорируют libcmt.lib, потому что он конфликтует с динамической версией msvcrt.lib. Игнорирование libcmt в компоновщике заставляет проект компилироваться с msvcrt.lib