与 clang 完全静态链接

soh*_*ham 5 c linker gcc llvm clang

如何使用 clang 生成完全静态的二进制文件?我使用了以下命令:

clang -flto <source files> -o <executable output> -fuse-ld=lld -static-libgcc -lc -Bstatic -m32
Run Code Online (Sandbox Code Playgroud)

然而,生成的输出取决于某个.so文件:

$ ldd <executable output file>
    linux-gate.so.1 =>  (0xf77dd000)
    libc.so.6 => /lib/libc.so.6 (0xf75f0000)
    /lib/ld-linux.so.2 (0x5663b000)
Run Code Online (Sandbox Code Playgroud)

以下答案试图回答问题,但并没有直接解决问题。 是否有可能生成完全独立的二进制文件?或者我应该求助于使用除 之外的其他不同的 C 库实现libgcc

如果是,那么如果我有源代码,例如,如何将其与 clang 链接newlib

zer*_*tyz 5

只需使用 clang 的 -static 标志编译它即可。

根据您的情况,请尝试:

clang -flto <source files> -o <executable output> -static -m32
Run Code Online (Sandbox Code Playgroud)

我的测试程序的结果显示:

[root@interserver ogrerobot.com]# ldd ./CppUtilsSpikes  
not a dynamic executable
Run Code Online (Sandbox Code Playgroud)