【发布时间】:2018-03-19 17:07:32
【问题描述】:
如何使用 clang 生成完全静态的二进制文件?我使用了以下命令:
clang -flto <source files> -o <executable output> -fuse-ld=lld -static-libgcc -lc -Bstatic -m32
然而,生成的输出依赖于某个.so 文件:
$ ldd <executable output file>
linux-gate.so.1 => (0xf77dd000)
libc.so.6 => /lib/libc.so.6 (0xf75f0000)
/lib/ld-linux.so.2 (0x5663b000)
The following answer 试图回答问题,但没有直接解决问题。
是否有可能生成完全独立的二进制文件? 或者我应该求助于使用 libgcc 以外的其他不同的 C 库实现?
如果是,那么如果我有源代码,例如newlib,如何将其与clang 链接?
【问题讨论】:
-
linux-gate.so是系统调用接口,ld-linux.so是 ELF 二进制解释器(参见:stackoverflow.com/questions/19981862/…)。您可能可以获得libc的静态链接版本,但其他版本需要在那里。这就引出了一个问题:“为什么?”和“最终目的是什么?”除非你正在做一个引导加载程序或类似的...... -
如果你静态链接
libc.so,你通常会得到一个less可移植的可执行文件。 -
我正在尝试在我的编译器中进行一些分析,为此我需要完全独立的二进制文件。
-
您是否尝试过 -static 选项?您可能会发现某些您想要的库不是以静态形式提供的。您也许可以找到静态版本,或从源代码构建它们。
-
我正在尝试在我的编译器中进行一些分析,为此我需要完全独立的二进制文件所以这是XY problem. 什么问题在分析您的编译器时,您认为完全静态链接的二进制文件可以解决吗?