Предположим, у вас есть две статические библиотеки A и B, такие, что A ссылается на методы из B. Возможно ли статически связать исполняемый файл с A и B, чтобы в B не было неразрешенных символов, на которые ссылается A?
Вот моя ситуация:
Когда я пытаюсь все связать таким образом в Visual Studio 2010, между A и B возникают неразрешенные символы, но не между приложением и A. Символы, на которые он жалуется, имеют префикс __imp (которого нет, и не должно существовать в DUMPBIN B). Почему он ищет символы с префиксом __imp, хотя ни одна из библиотек не построена как DLL, и я включил все необходимые «Дополнительные зависимости / каталоги библиотеки» во все проекты? Кроме того, все построено с точно таким же компилятором.
РЕДАКТИРОВАТЬ: Может быть полезно знать, что если библиотека B построена как DLL с библиотекой импорта вместо статической библиотеки, все будет правильно соединено.
РЕДАКТИРОВАТЬ: Я почти уверен, что это не условие препроцессора, вызывающее declspec () или что-то, потому что нет никаких ошибок компоновщика, когда приложение использует B .. только когда A использует B.
ОТВЕТ: Эдвин и JimR верны, на самом деле в заголовке использовался макрос, вызывающий declspec, но я был слишком упрям, чтобы заметить это, когда они впервые упомянули такую возможность. Спасибо, ребята, за ваше терпение.