我又遇到了共享库在其他地方找到一些符号的事故 比里面本身。 我怎样才能防止这种情况发生? 我已经在使用 -fvisibility=hidden。 看起来所有模板函数都被编译为弱符号,并且仅在加载时解析。 我已经在使用 RTLD_DEEPBIND 来避免这个问题——但是 purify 忽略了这个选项。
最佳答案
这个问题的解决方案似乎是来自 GNU binutils 的 objcopy 命令。 它允许改变符号属性。 使用的选项可能是 --localize-symbols=文件名 或者 --globalize-symbols=文件名 另一种方法是使用 g++ 编译器选项 -fno-weak——但是 g++ 手册页不鼓励使用这个选项——我不确定为什么——来自 C++ 库的某些符号可能最终必须是弱的。
关于linux - 如何在共享库中的链接时(不是加载时)解析弱符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20480129/