Linux 如何静态链接复杂程序
在Linux中,下载了一个程序源并希望它被静态链接。 有一个巨大的Makefile, 我 编译。 这个问题有点太笼统了,但是如何使二进制静态链接 编辑:这样做的原因是希望确保二进制文件Linux 如何静态链接复杂程序,linux,static,linker,Linux,Static,Linker,在Linux中,下载了一个程序源并希望它被静态链接。 有一个巨大的Makefile, 我 编译。 这个问题有点太笼统了,但是如何使二进制静态链接 编辑:这样做的原因是希望确保二进制文件 没有依赖项(或至少尽可能少),因此可以在任何基于Linux的计算机上运行,即使没有Internet连接,也可以在未更新的Linux上运行。是的,您需要编辑make文件,并在链接期间将-static参数添加到gcc中。我假设它使用gcc编译一系列c程序,尽管您必须查看Makefile才能找到答案 如果是这样,您可以
没有依赖项(或至少尽可能少),因此可以在任何基于Linux的计算机上运行,即使没有Internet连接,也可以在未更新的Linux上运行。是的,您需要编辑make文件,并在链接期间将-static参数添加到gcc中。我假设它使用gcc编译一系列c程序,尽管您必须查看Makefile才能找到答案 如果是这样,您可以调整makefile中的gcc行以进行静态链接,尽管这可能是一个复杂的更改,具体取决于程序的结构。看看ManGCC,看看这是如何做到的 我想知道你为什么静态链接。您是否考虑过改用预链接
您应该知道,如果所有组件都不是GPL,那么执行此操作可能会有许可证问题。大多数
autoconf
生成configure
脚本将允许您进行静态生成:
./configure --enable-static
make
如果这不起作用,您可以通过LDFLAGS
传入链接器标志,如下所示:
./configure LDFLAGS=-static
如果你不能编译静态二进制文件,我已经用它得到了很好的结果。回答得很好,不幸的是,这两个原因都不起作用。从我理解的,它是不起作用的,因为我缺少静态库来连接。在CENTOS上,你需要为静态链接安装的包是C++的代码> GLYBC静态< /代码>和<代码> LBSTDC++-static < /C>用于C++静态链接。看,这个答案并不完全正确
--enable static
标志仅适用于库,它表示“生成此库的支持静态的版本(可能是支持动态的版本之外)”。动态版本(使用--启用共享启用)是。因此对于Linux是。对于Mac是。dylib是,而静态版本通常是。a
。仅供参考如果LDFLAGS
方法不起作用,请添加另一个短划线/configure LDFLAGS='--static'
。这可能适用于某些项目,例如procps
极好的想法。我有一个类似的产品非常好的结果。静态链接被认为是有害的!对不起,这不是对你问题的直接回答,但我只是想指出一点。
./configure LDFLAGS=-static