Я относительно новичок в 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