如何在保持动态加载的同时静态链接libc?

时间:2016-02-20 23:33:58

标签: c gcc linker libc

我想构建一个可以使用动态可加载插件的静态链接应用程序。 问题是我无法摆脱libc.so依赖。

我使用musl libc并编译

 /opt/cross/x86_64-linux-musl/bin/x86_64-linux-musl-gcc -Wl,-E -fPIC -I... -static-libgcc -Wl,-Bstatic -ldl -lc -lgcc source.c -o output_bin foo.a bar.a -Wl,-Bdynamic

readelf -d表明可执行文件取决于libc.so,因此可执行文件无法在没有musl libc的其他计算机上运行。

是否可以将libc符号包含到elf可执行文件中并将所有外部插件链接到elf本身,而不需要外部.so依赖项?怎么做到这一点?

1 个答案:

答案 0 :(得分:0)

也许您应该尝试使用-nostdlib参数在没有stdlib的情况下编译它。