【发布时间】:2014-02-07 07:50:54
【问题描述】:
我需要更改目标文件或库中的符号可见性。例如,一个特定的共享对象有一个符号名称,但它是本地的,所以我不能绑定到它(较低的t 表示 TEXT 部分中的本地):
$ nm /usr/local/ssl/lib/libcrypto.so | grep -i OPENSSL_cpuid_setup
00000000000c3f80 t OPENSSL_cpuid_setup
000000000008a360 t fips_openssl_cpuid_setup
存档中存在相同的符号,但此项目中未使用存档(上面的T表示TEXT部分中的全局):
$ nm /usr/local/ssl/lib/libcrypto.a | grep -i OPENSSL_cpuid_setup
0000000000000310 T OPENSSL_cpuid_setup
000000000000f8e0 T fips_openssl_cpuid_setup
我希望OPENSSL_cpuid_setup 的可见性是全局的而不是本地的。
有没有办法改变目标文件或库中的符号可见性?我已经通过Binutil tools了,好像没有合适的工具。
为了完整起见,“最简单”的方法不可用,因为源代码被隔离且无法更改。最简单的方法包括(1)从声明中删除static; (2) 使用 GCC 的可见性属性。
【问题讨论】:
标签: c shared-libraries visibility symbols binutils