При работе с существующим проектом, после внесения некоторых изменений в некоторые внешние библиотеки, я сталкиваюсь с проблемами следующего типа при построении библиотеки, зависящей от другой динамически связанной библиотеки:
ошибка LNK2001: неразрешенный внешний символ "public: virtual void * __cdecl Foo ::` скалярный деструктор удаления "(unsigned int)
ошибка LNK2001: неразрешенный внешний символ" public: virtual void * __cdecl Foo :: `деструктор удаления вектора '(unsigned int)
Если я запускаю dumpbin /symbols
в испорченном файле .obj
, я ясно вижу эти символы как UNDEF
.
Что меня интересует, так это то, что нет никаких претензий к другим неопределенным символам, а деструктор для Foo
вообще не указан в дампе символа объектного файла. Основные ссылки на эти синтезированные функции, которые я могу найти в StackOverflow, принадлежат людям, которые не определили свой деструктор, однако я ясно вижу, что Foo::Foo
экспортируется из библиотеки, в которой определен Foo
(при запуске dumpbin /exports
на.lib
).
Это подводит меня к сути моего вопроса: когда Visual Studio (2015) решает синтезировать эти функции и когда решает, что они должны быть связаны с другим модулем перевода?