我目前正在用c ++开发一个简单的游戏引擎。为了使我的构建过程跨平台,我一直在使用cmake。我已经达到了这样的程度,即我将大部分代码库构建为我的测试代码链接的库。这适用于在linux上使用gcc的静态和共享库构建,也适用于在Windows上使用msvc的静态库构建,但是对于使用msvc的共享库构建,我收到了数千个链接器错误。
所述错误的一些示例如下(这是针对Debug构建的)
Error LNK2001 unresolved external symbol __purecall CuttingEdge
C:\Projects\Test\CuttingEdge\Build\assimp-vc140-mt.lib(3DSConverter.obj)
Error LNK2019 unresolved external symbol _malloc referenced in function
"void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) CuttingEdge
C:\Projects\Test\CuttingEdge\Build\MSVCRTD.lib(new_scalar.obj) 1
Error LNK2001 unresolved external symbol ___CxxFrameHandler3 CuttingEdge
C:\Projects\Test\CuttingEdge\Build\Material.obj 1
值得注意的是,发生这些错误的三个地方:我的共享库静态链接的几个依赖项,共享库本身,以及我理解为windows c ++运行时实现之一的MSVRTD.lib。 / p>
根据我的理解,这里缺少的符号应该由windows c ++运行时提供,所以我假设我的项目链接与共享库构建的链接有一些问题。
根据我发现的调查问题的信息,我尝试了一些事情:
这个问题让我觉得与windows c ++运行时相关的构建选项有点关系,它似乎是由visual studio cmake生成器设置的,我想这可能正确配置这些设置。