gpt4 book ai didi

c++ - 如何将 SFML 游戏服务器部署到 Linux 服务器?

转载 作者:IT王子 更新时间:2023-10-29 00:38:50 24 4
gpt4 key购买 nike

我写了一个迷你客户端-服务器游戏,在我的电脑(运行 linux)上运行良好,因为我在客户端和服务器上都安装了 SFML(和 GCC 4.8)。现在我想将服务器应用程序部署到另一个没有 SFML 的 Linux。

首先我尝试动态链接使用的 SFML 库(网络和系统):

g++ server.cpp -o ServerLinux -std=c++11 -Os -lsfml-network -lsfml-system

但是当我运行服务器应用程序时,它说找不到 sfml-network.so.2 和 sfml-system.so.2,即使这 2 个文件位于二进制文件的同一文件夹中。

然后我静态链接了两个库:

g++ -DSFML_STATIC server.cpp -o ServerLinux -std=c++11 -Os -lsfml-network-s -lsfml-system-s

然后当我运行时它说找不到 GLIBC_2.15 和 GLIBC_2.17

最后,在我的最后一次尝试中,我静态链接了 libstc++ 和 libgcc:

g++ -DSFML_STATIC server.cpp -o ServerLinux -std=c++11 -Os -lsfml-network-s -lsfml-system-s -static-libstdc++ -static-libgcc

但我仍然遇到同样的错误(找不到 GLIBC_2.15 和 GLIBC_2.17)。

阅读类似的问题,似乎永远不要静态链接glibc。但我不知道如何进行,如何将我的迷你游戏服务器部署到没有 SFML 的 Linux 机器上?

最佳答案

Linux 系统使用 LD_LIBRARY_PATH 环境变量搜索共享库,它们不会像 Windows 那样自动查找应用程序旁边的二进制文件。使用共享库进行部署的一种非常常用的方法是将它们包含在子目录或类似目录中,而不是直接启动应用程序运行 shell 脚本,该脚本会将包含库的目录临时添加到 ?LD_LIBRARY_PTH`,然后启动申请。

您遇到的另一个问题与依赖关系有关。

对于共享库,您不仅要提供共享 SFML 库,还要提供依赖项的共享库,除非您可以 100% 保证目标系统具有相同的库版本。

如果您只是构建 SFML 的静态库,它们仍将指向共享运行时库等,因此如果您不为应用程序提供匹配的版本,它将无法启动,因为它不能找到图书馆。如果您静态链接到运行时库,则不需要为您的应用程序 提供共享库,但由于 SFML 库仍然动态链接到运行时库,它们无论如何都会请求共享库。

因此,如果您不再需要任何共享库文件,则需要将 SFML 静态链接到运行时库(取消选中 BUILD_SHARED_LIBS 并选中 SFML_USE_STATIC_STD_LIBS ).

请记住,静态链接时,您需要针对所有依赖项进行静态链接 - -static 可能很有用。

关于c++ - 如何将 SFML 游戏服务器部署到 Linux 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com