如何创建可以在任何发行版上运行的静态二进制文件?

24

一些像supertuxkart或regnum online这样的Linux应用程序具有静态二进制文件,在下载后无需安装任何共享库即可工作。 支持每个发行版。 我如何制作这样的应用程序?

1个回答

25

确保所有资源都包含在可执行文件中,并将可执行文件静态链接:

gcc -o foo main.o -static -lbaz -lbar

但是,这也有缺点。搜索动态链接。


1
如果我静态链接库A,而库A本身又链接了库B,那么我是否也需要链接库B呢? - user1873947
当您进行静态链接时,库无法引用其他库。您必须在命令行上命名它们所有,或使用 libtool - thiton
好的。对于二进制文件,有一个Linux命令可以查看它使用了哪些共享库,那么是否有类似的命令可以查看需要链接哪些库呢? - user1873947
1
@user1873947:不行,因为你无法通过设计来知道。静态库档案(.a)是一堆函数。如果库的作者足够友好地创建了一个.pc文件,那么pkg-config就会知道,否则你需要阅读文档并自己摸索。 - thiton
最后一个问题,Windows上有Mingw命令行标志来静态链接C++库,g++是否有类似的东西? - user1873947
4
-static-libgcc-static-libstdc++。这是两个编译选项,用于在链接程序时静态地链接 GNU C 库和 GNU C++ 库。它们的使用可以确保您的程序在其他计算机上运行时不会出现缺少库文件的错误。 - thiton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接