我是C ++的新手,但遇到了一些我不太了解的奇怪的链接器错误。在Visual Studio中,我有一个项目“ Engine”,该项目可生成一个.dll文件。我有一个使用__declspec(dllexport / dllimport)的宏,如下所示:
#if _WINDLL
#define V3API __declspec(dllexport)
#else
#define V3API __declspec(dllimport)
#endif
“引擎”内部的所有公共功能均以V3API为前缀。 _WINDLL是在项目设置中定义的,并且我同时获得了一个.dll文件和.lib文件,并且据我所知,.lib应该指向.dll内部的实际功能。
“引擎”具有三个可以动态链接的库(无论如何,我还是假设它们):Vulkan,Intel的TBB和GLFW。
我有第二个项目“客户端”,我想在其中使用“引擎”库中的函数。我已经从Visual Studio的“客户端”中添加了对“引擎”的引用,但是当我构建“客户端”时,链接器将查找“ tbb_debug.lib”。
为什么“客户”需要参考TBB?我认为动态链接的重点是,库的子项目不需要主项目使用的外部库。我显然在这里丢失了一些东西。
如果我给“客户端”提供对tbb.lib和tbb_debug.lib的引用,则对于从“引擎”导入的所有函数,我都会收到链接器错误(LNK2019)。希望有人可以在这里指出正确的方向。这是输出示例:
Client.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl EventListener