Мы недавно обновились до Visual Studio 2008 с 2005 года, и я думаю, что эти ошибки начались после этого.
В нашем решении у нас множество проектов. Многие из них являются служебными проектами или проектами, содержащими основные функции, используемые другими проектами. Выходные данные - это файлы lib, которые связаны при сборке проектов, генерирующих окончательные двоичные файлы с использованием параметра «Зависимости проекта ...».
Один из других проектов - назовем его ResultLib - генерирует DLL, и ему требуется одна функция из основного проекта. Эта функция использует только статическую функцию из своего исходного файла, но проект в целом использует множество низкоуровневых функций Windows, а также импортирует DLL. Давайте назовем ее Driver.dll.
Наша проблема в том, что при сборке ExtLib компоновщик жалуется на множество неразрешенных внешних объектов, например, на все функции, экспортированные из Driver.dll, так как его файл lib не указан при компоновке. Если мы попытаемся исправить это, добавив все файлы lib, используемые другими проектами, использующими весь основной проект, наша результирующая DLL ResultLib в итоге импортирует Driver.dll, а также экспортирует все функции, определенные в ней.
Как мы говорим Visual Studio пытаться разрешать только символы, которые фактически используются?