C ++ - Ошибка связывания динамической библиотеки с Visual Studio - PullRequest
0 голосов
/ 02 ноября 2018

Я относительно новичок в C ++ и получаю некоторые странные ошибки компоновщика, которые я не совсем понимаю. В Visual Studio у меня есть проект «Engine», который создает файл .dll. У меня есть макрос для использования __declspec (dllexport / dllimport) следующим образом:

#if _WINDLL
    #define V3API __declspec(dllexport)
#else
    #define V3API __declspec(dllimport)
#endif

Все публичные функции внутри "Engine" имеют префикс V3API. _WINDLL определяется в настройках проекта, и я получаю как файл .dll, так и файл .lib, и, насколько я понимаю, .lib должен указывать на фактические функции внутри .dll.

«Движок» имеет три библиотеки, которые (я так или иначе предполагаю) динамически связаны: Vulkan, Intel TBB и GLFW.

У меня есть второй проект "Клиент", в котором я хочу использовать функции из библиотеки "Engine". Я добавил ссылку на «Engine» из «Client» внутри Visual Studio, однако при сборке «Client» компоновщик ищет «tbb_debug.lib».

Почему «Клиенту» нужна ссылка на TBB? Я думал, что смысл динамического связывания заключается в том, что подпроекты библиотеки не требуют внешних библиотек, используемых основным проектом. Я явно что-то здесь упускаю.

Если я дам "Клиенту" ссылку на tbb.lib и tbb_debug.lib, я получу ошибку компоновщика (LNK2019) для всех функций, импортированных из "Engine". Надеюсь, кто-то может указать мне правильное направление здесь. Вот пример вывода:

Client.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl EventListener
...