使用静态 SFML 库时无法 link 我的项目
Cannot link my project when using static SFML libraries
我正在尝试使用 static SFML 库.
在 Visual Studio 中构建一个项目
我设置了所有相应的 linker 设置并且它起作用了:我可以构建一个可执行文件 运行 在我的机器上的任何地方。然而,我的朋友不能运行:他们没有msvcp140.dll。我不想用可执行文件打包额外的 DLL,也不希望他们在他们的机器上安装额外的 运行-time 库。
所以我假设 我需要使用 "Multi-threaded \MT" 设置 构建项目(与 "Multi-threaded DLL \MD" 设置相反)
但是切换到该选项会导致 SFML 库出现多个 linker 错误,例如:
LNK2038:检测到 'RuntimeLibrary' 不匹配:值 'MD_DynamicRelease' 与 Program.obj[= 中的值 'MT_StaticRelease' 不匹配11=]
我确定我正在使用静态 SFML 库并且它们 link 正确编辑,但我无法切换到 \MT 设置以获得完全的可移植性。事实上,使用库的动态版本允许 \MT 设置 - 这显然是无用的,因为现在 SFML 不会 link 静态。 有什么建议吗?
您走在正确的轨道上,您只需要使用使用相同运行时的 SFML 版本(或自己构建)。否则,链接器会检测到不匹配。
调用CMake时,只需将变量SFML_USE_STATIC_STD_LIBS
设置为TRUE
即可,例如通过 运行 cmake -DSFML_USE_STATIC_STD_LIBS=TRUE .
在您的 SFML 构建目录中。然后像往常一样构建。
我正在尝试使用 static SFML 库.
在 Visual Studio 中构建一个项目我设置了所有相应的 linker 设置并且它起作用了:我可以构建一个可执行文件 运行 在我的机器上的任何地方。然而,我的朋友不能运行:他们没有msvcp140.dll。我不想用可执行文件打包额外的 DLL,也不希望他们在他们的机器上安装额外的 运行-time 库。
所以我假设 我需要使用 "Multi-threaded \MT" 设置 构建项目(与 "Multi-threaded DLL \MD" 设置相反)
但是切换到该选项会导致 SFML 库出现多个 linker 错误,例如:
LNK2038:检测到 'RuntimeLibrary' 不匹配:值 'MD_DynamicRelease' 与 Program.obj[= 中的值 'MT_StaticRelease' 不匹配11=]
我确定我正在使用静态 SFML 库并且它们 link 正确编辑,但我无法切换到 \MT 设置以获得完全的可移植性。事实上,使用库的动态版本允许 \MT 设置 - 这显然是无用的,因为现在 SFML 不会 link 静态。 有什么建议吗?
您走在正确的轨道上,您只需要使用使用相同运行时的 SFML 版本(或自己构建)。否则,链接器会检测到不匹配。
调用CMake时,只需将变量SFML_USE_STATIC_STD_LIBS
设置为TRUE
即可,例如通过 运行 cmake -DSFML_USE_STATIC_STD_LIBS=TRUE .
在您的 SFML 构建目录中。然后像往常一样构建。