2009-06-11 20 views
16

在Linux中,下载了一个程序源并希望它是静态链接的。 有一个巨大的Makefile那里, 我如何静态链接一个复杂的程序

./configure 
make 

编译。 012hprehpes这是有点过于笼统的问,但我怎样才能使二进制静态链接? 谢谢。

编辑:这是为了确保二进制将 没有依赖关系(或至少尽可能少),使任何Linux的计算机上运行,​​即使没有互联网连接,并非更新的Linux。

+1

静态链接被认为是有害的! http://people.redhat.com/drepper/no_static_linking.html我很抱歉,这不是对您的问题的直接回答,但我只是想指出。 – 2009-06-11 20:39:44

回答

25

大多数autoconf产生configure脚本将让你做出一个静态编译:

./configure --enable-static 
make 

如果不工作,你可以通过LDFLAGS通过连接标志中,就像这样:

./configure LDFLAGS=-static 
+0

非常好的答案,不幸的是两个都没有工作出于某种原因。 – 2009-06-13 20:06:35

+0

从我的理解来看,这并不奏效,因为我缺乏静态库链接。 – 2009-06-21 18:20:25

5

是的,您需要编辑make文件并在链接期间向gcc添加-static参数。

1

我假设它使用gcc来编译一系列的c程序,但是你必须查看Makefile才能找到。

如果是这样,您可以调整makefile中的gcc行来进行静态链接,尽管取决于程序的结构,但这可能是一个复杂的变化。看看man gcc,看看这是如何完成的。

我很想知道你为什么静态链接。你有没有考虑过使用prelinking?

您应该知道,如果所有组件都不是GPL,则可能会出现许可证问题。

2

如果你不能编译一个静态二进制文件,我使用Statifier有很好的结果。