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

标签 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 依赖项?如何实现这一目标?

最佳答案

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

关于c - 如何在保持动态加载的同时静态链接libc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35530420/

相关文章:

c - 如何更改一个功能的优化级别?

c - 我无法在 ubuntu 上编译 OCILIB

c++ - 为什么 ld 链接器允许使用相同方法定义多个类?

c - C 中有类似 C++ 模板的东西吗?如果不是,如何为不同的数据类型重用结构和函数?

c# - 如何通过 C/C++/C# 项目解析并将所有包/类/方法写入数据库?

c - 嵌入: 4-wire resistive touchscreen

c - 如何在双指针中返回 int 数组?

gcc - 是否可以在目标文件上生成展开表

c++ - mysql 连接器中对 mysqlx 函数的 undefined reference

c++ - undefined reference 错误消息 - C++