c - 有没有办法用 GNU binutils 取消隐藏隐藏的可见性符号?

标签 c gcc visibility binutils

我正在编写一个脚本,使 uClibc 可用于现有的以 glibc 为目标的 gcc/binutils 工具链,而我留下的一个问题是 pthread_cancel 需要 dlopen libgcc_s.so.1。主机 gcc 提供的版本链接到依赖于 glibc,所以我改为使用 ld-u 选项来提取所需的符号(及其依赖项) ) 从 libgcc_eh.a 替换 libgcc_s.so.1:

gcc -specs uclibc.specs -Wl,-u,_Unwind_Resume -Wl,-u,__gcc_personality_v0 \
    -Wl,-u,_Unwind_ForcedUnwind -Wl,-u,_Unwind_GetCFA -shared -o libgcc_s.so.1

原则上我会完成,但是 libgcc_eh.a 中的所有符号都将其可见性设置为隐藏,因此在输出 .so 文件中,它们都变成了本地,不要添加到 .dynsym 符号表。

我正在寻找一种在 .so 文件或原始 上使用 binutils(可能是 objcopy?或链接描述文件?)的方法。 o libgcc_eh.a 中的 文件以取消隐藏这些符号。这可能吗?

最佳答案

objcopy 似乎没有这个功能,但是你可以用 ELFkickers rebind tool 来实现:

rebind --visibility default file.o SYMBOLS...

这必须在原始 .o 文件上完成。如果您尝试在 .so 上执行此操作,则为时已晚,因为隐藏的符号将从 .dynsym 部分中省略。

关于c - 有没有办法用 GNU binutils 取消隐藏隐藏的可见性符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377608/

相关文章:

go - 我们如何将 gcc-go 安装到 AIX 机器 power-pc-7 bigendian 64 位?

c - 限制 C 中的库链接

module - 如何在 rescript 中将类型构造函数设为私有(private)(当前模块除外)?

c - 使用 ffmpeg 判断文件是视频还是图像

c++ - 查找定义我的 C/C++ 函数/宏的文件的方法比 'grep' 更简单

c - 尝试轮询 MSP430 的键盘输入

c - const char **envp 应该做什么?

c - Linux 中条件运算符的奇怪使用

python - 子项目的 CMake 覆盖策略

c# - Interlocked 是否在所有线程中提供可见性?