【问题标题】:How to statically link libc while keeping dynamic loading?如何在保持动态加载的同时静态链接 libc?
【发布时间】:2016-06-02 12:12:30
【问题描述】:

我想构建一个可以使用动态加载插件的静态链接应用程序。 问题是我无法摆脱 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 依赖项?如何做到这一点?

【问题讨论】:

    标签: c gcc linker libc


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2011-04-24
      相关资源
      最近更新 更多