我有一个SFML,Visual Studio项目,需要在运行时库设置中使用/ MT选项进行链接,因为我想避免必须安装可重新分发给运行该程序的每台计算机的Microsoft。
当我将sfml添加到项目中时,它似乎可以动态形式正常工作。但是,当我在另一台计算机上尝试该程序时,它告诉我缺少Visual Studio dll。
我知道,为了将sfml静态链接到项目,我必须使用不同的运行时库来重建它。我的问题是,如果它无法将必需的Visual Studio dll静态链接到项目,为什么它能够正确地动态链接到项目的sfml并同时将项目设置为/ MT?
答案 0 :(得分:2)
在评论中进行讨论之后,我们对此达成了共识:
静态链接某些库并仍然动态链接到其他库(例如语言运行库)并不少见。因此,编译器不应对此抱怨。
要获得包含所有内容的单个可执行文件,该程序必须静态链接所有库,并且它们还必须静态链接到其所有依赖项。
否则,如果我们有一个动态库(如SFML),则该库可能会依次动态链接到运行时库。而且仍然需要运行时DLL。
答案 1 :(得分:1)
这是可能的,您只需要自己构建SFML(这并不难做到)。
只需确保将CMake变量SFML_USE_STATIC_STD_LIBS
设置为TRUE
,以便SFML使用静态运行时,无论您实际上是在创建静态库还是共享库。
简而言之:
cmake -DSFML_USE_STATIC_STD_LIBS=TRUE -DCMAKE_INSTALL_PREFIX=C:/path/where/to/install/SFML C:/path/to/the/cloned/source/repository
INSTALL
项目,您就可以使用静态运行时获取共享的SFML。