繁体   English   中英

如何与他人分享我的SFML游戏没有错误?

[英]How can I share my SFML game with others without errors?

所以,我用C ++ / SFML完成了一个游戏,我想将它发送给某人,但是当我发送它时有错误:我在另一台需要SFML DLL的计算机上测试了exe,它向我展示了libstdc ++ - 6.dll丢失,所以我添加了它,我再次尝试,它告诉我还有其他dll缺失,这是非常尴尬的。 如果没有所有这些错误和丢失的DLL,我如何分享我的游戏?

您可以使用Dependency Walker (depends.exe)查找您的应用程序正在使用的所有dll-s。 它仍然需要一些试验和错误周期来发现你需要的,但至少你有一个地方可以从一开始。 您很可能需要编译器提供的dll以及您正在使用的其他库的dll。 您很可能不需要System32文件夹中的任何内容。

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

您将不得不克隆SFML存储库并使用CMake生成Visual Studio项目 ,然后可以使用/ MTd进行静态构建SFML以进行调试,并使用/ MT进行发布。 这些选项可在Project Properties > C/C++ > Code Generation > Runtime Library

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

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

您需要在Project Properties中为SFML_STATIC添加预处理器定义。

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

现在您需要包含静态库。 无论您在项目中使用哪个SFML库,但添加了“-s”

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

SFML使用openal32.lib,并且由于许可,您需要在exe文件夹中包含该DLL

#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

链接到SFML FAQ,显示静态链接时每个lib需要包含的内容

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

libstdc ++ - 6.dll是一个DLL文件,位于编译器的文件夹中。 所以你应该用所有编译器的dll来测试它。

希望这有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM