我该如何使用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)
以下回答 尝试回答这个问题,但并未直接解决问题。 是否可能生成完全独立的二进制文件? 或者我应该使用除libgcc
之外的其他不同C库实现来解决问题吗?如果可以,那么如果我拥有例如
newlib
的源代码,我该如何将其与clang链接?
linux-gate.so
是系统调用接口,而ld-linux.so
则是 ELF 二进制解释器(参见:https://dev59.com/dmIj5IYBdhLWcg3wsnGn)。你可能能够获得一个静态链接版本的libc
,但其他文件必须存在。这引出了一个问题:“为什么?”和“最终目的是什么?”除非你正在做一个引导加载程序或类似的东西... - Craig Esteylibc.so
,通常会得到一个不太可移植的可执行文件。 - Andrew Henle