我使用 C++ 和 Allegro 5 制作了一款游戏,它在我装有 Linux 的电脑上运行良好。我想知道如何创建一个可以导出到另一台 Linux 计算机的包,并使其在不安装 Allegro 的情况下运行。谢谢
最佳答案
我刚才不得不弄清楚这个问题,下面是一个基于对我有用的步骤的指南。很可能有一种“更好”的方式来静态链接到 allegro。
首先,您需要 allegro 的静态库。如果你的发行版 不打包这些,你必须自己构建它们:
- 克隆源代码(假设您将其克隆到名为
allegro
的目录中)。 - 创建构建目录:
cd allegro && mkdir build && cd build
cmake .. -DSHARED=off
。这指定我们需要静态(非共享)库制作
- 您现在应该会在构建目录的
lib
下看到以.a
扩展名结尾的库。
现在您可以像这样链接到静态库:
gcc main.c -o main -Lpath/to/allegro/build/lib -lallegro-static
除非您在标准库路径中安装静态库(例如
/usr/lib) 您需要 -L
参数来为链接器提供指向
您刚刚构建的静态库。
如果你只是尝试上面的方法,你会注意到一些其他链接器错误 图书馆。静态链接时,您需要手动指定链接器 快板依赖项的标志。老实说,我不记得这是为什么,但是 我只知道我必须这样做。
要确定这些依赖关系,请尝试使用共享的构建程序一次 库:
gcc main.c -o main -lallegro
然后在生成的二进制文件 (main
) 上运行 ldd
。你应该看到类似这样的东西:
linux-vdso.so.1 (0x00007fff1dbfd000)
liballegro.so.5.2 => /usr/lib/liballegro.so.5.2 (0x00007f8b802ea000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f8b7ff4c000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f8b7fc48000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f8b7fa2b000)
...
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f8b7c551000)
将这些中的每一个翻译成链接器标志,您的最终命令将如下所示:
gcc main.c -o main -lallegro -lm -lpthread -lX11 ...
您会注意到您不必链接到 ldd
输出中的所有内容,您
可以使用它来找到您需要的最小链接器标志集。你会需要
如果您链接到其他模块,则需要更多链接器标志。例如,链接
到 lallegro_audio-static
将需要像 -lpng
这样的标志来链接到 PNG
图书馆。
最终,您会发现一组标志,可让您静态链接到
快板。要检查结果,请在静态链接的二进制文件上运行 ldd
;你
应该注意到 allegro
不再包含在输出中,因为用户会
不再需要动态链接到 allegro。
关于c++ - 如何让一个程序在其他电脑上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291062/