【问题标题】:how to resolve weak symbols at link time (not load time) inside a shared library如何在共享库中的链接时(不是加载时)解析弱符号
【发布时间】:2013-12-27 02:57:46
【问题描述】:

我遇到了另一个意外,共享库在其他地方发现了一些符号 比在自己里面。 我怎样才能防止这种情况? 我已经在使用 -fvisibility=hidden。 看起来所有模板函数都被编译为弱符号并且仅在加载时解析。 我已经在使用 RTLD_DEEPBIND 来避免这个问题——但是 purify 会忽略这个选项。

【问题讨论】:

  • 除了关于 purify 不支持此选项并导致疯狂错误之外,这也是一个问题,因为共享库变得太大并且通过 thunk 调用生成的符号。
  • 我也对能够控制哪个符号最终在哪里结束以及谁将使用它感兴趣。

标签: linux g++ shared-libraries


【解决方案1】:

看来这个问题的解决方案是来自 GNU binutils 的 objcopy 命令。 它允许更改符号属性。 使用的选项可能是 --localize-symbols=文件名 要么 --globalize-symbols=文件名 另一种方法是使用 g++ 编译器选项 -fno-weak——但 g++ 手册页不鼓励使用此选项——我不确定为什么——可能来自 C++ 库的某些符号必须以弱结尾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多