(Visual Studio)尝试使用SFML库静态链接microsoft库时出现许多链接器错误

时间:2016-06-10 16:30:24

标签: c++ visual-studio static linker sfml

所以我需要一个防止暴动的应用程序。 我已经完成了,但当我尝试在一个裸Windows 7虚拟机中运行它我有很多错误,如msvcp140.dll丢失等。等。 所以我正在搜索谷歌以静态链接那些。 我发现我应该在项目代码生成选项中更改它,所以我做到了。 我也有静态链接的SFML。 问题是我得到了很多链接器错误,引用了SFML,如:

sfml-system-s.lib(String.cpp.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in main.obj

我不确定为什么会这样,所以我在这里寻求帮助

1 个答案:

答案 0 :(得分:0)

我很确定我只是通过阅读错误消息,思考术语“RuntimeLibrary”以及如何说“DynamicRelease”和“StaticRelease”之间存在不匹配来解决您的问题。我的直觉说你试图将一个针对CRT的一个版本编译的库与一个针对不同版本的CRT的应用程序结合起来。鉴于“MD”和“MT”分别是控制动态或静态链接运行时的编译器开关,这也是一个非常好的线索。

但是为了确定,我采用了实际的错误代码(LNK2038)并在the documentation中查找了它。果然,它包含一个描述问题的段落:

  

<强>运行时库

     

表示应用程序或库使用的C ++标准库和C运行时的版本。使用一个版本的C ++标准库或C运行时的代码与使用不同版本的代码不兼容。有关详细信息,请参阅/MD, /MT, /LD (Use Run-Time Library)

多年来,链接器已经变得聪明。它试图保护你免于犯严重的错误。所有正在链接在一起的模块都需要编译为针对相同类型的运行时库。如果您希望应用程序静态链接到CRT(/ MT),您还需要静态地建立库链接(/ MT)。
项目属性→配置属性→C / C ++→代码生成→运行时库 别忘了重建全部。