如何与他人共享我的SFML游戏而不会出现错误?

时间:2019-06-14 16:40:11

标签: c++ dll compiler-errors exe sfml

因此,我用C ++ / SFML完成了游戏,我想将其发送给某人,但是当我将其发送给别人时,出现了错误:我在另一台计算机上测试了exe,并要求使用SFML DLL,并且它告诉我libstdc ++-6.dll丢失,所以我添加了它,然后再次尝试,它告诉我还有其他dll丢失,这很尴尬。如何在没有所有这些错误和缺少DLL的情况下共享我的游戏?

4 个答案:

答案 0 :(得分:3)

您可以使用Dependency Walker(depends.exe)查找您的应用程序正在使用的所有dll。仍然需要一些反复试验才能发现所需的内容,但是至少您要有一个起点。您很可能需要编译器提供的dll和正在使用的其他库的dll。您很可能不需要System32文件夹中的任何内容。

答案 1 :(得分:1)

如果您打算部署SFML应用程序,则建议静态构建项目。这还需要静态构建SFML。设置需要一些时间,但是所有依赖项都将包含在可执行文件中,从而使您的应用程序更加可靠且易于安装。不要将此过程与静态链接到SFML混淆,一旦静态构建SFML,您仍然需要这样做。

您将必须克隆SFML repository并使用CMake to generate your visual studio project,然后才能使用/ MTd静态构建SFML进行调试,使用/ MT静态构建SFML。这些选项可以在Project Properties > C/C++ > Code Generation > Runtime Library中找到。

答案 2 :(得分:1)

正如@ aj.toulan所说,您需要静态链接SFML。我假设您正在使用Visual Studio在Windows上进行开发。 当您下载和设置SFML时,它已经建立了静态库。

如果您正在使用任何外部库,则需要构建它们的静态版本!

您需要在项目属性中添加SFML_STATIC的预处理器定义。

  1. 转到项目属性
  2. 转到标签C / C ++
  3. 预处理器
  4. 添加“ SFML_STATIC;”在预处理程序定义的开头,然后按Enter。
  5. 应用

现在,您需要包括静态库。您在项目中使用的是哪个SFML库,但都添加了“ -s”

例如#pragma comment(lib,“ sfml-graphics-s.lib”)

SFML使用openal32.lib,并且由于许可的原因,您将需要将该DLL与exe放在文件夹中

#ifndef SFML_STATIC
#pragma comment(lib,"sfml-graphics-s.lib")
#pragma comment(lib,"freetype.lib")
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"sfml-system-s.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"sfml-window-s.lib")
#pragma comment(lib,"gdi32")
#pragma comment(lib,"winmm")
#pragma comment(lib,"sfml-audio-s.lib")
#pragma comment(lib,"flac.lib")
#pragma comment(lib,"ogg.lib")
#pragma comment(lib,"vorbisenc.lib")
#pragma comment(lib,"vorbisfile.lib")
#pragma comment(lib,"vorbis.lib")
#pragma comment(lib,"openal32.lib")
#pragma comment(lib,"sfml-main.lib")
#pragma comment(lib,"sfml-network-s.lib")
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"openal32.lib")
//include below line if you want to hide console window
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#endif // !SFML_STATIC

Link to SFML FAQ showing what you need to include for each lib when linking statically

答案 3 :(得分:0)

您应该使用所有编译器DLL测试可执行文件。

libstdc ++-6.dll是位于编译器文件夹中的DLL文件。因此,您应该使用所有编译器的dll对其进行测试。

希望这行得通。

相关问题