【发布时间】:2010-02-10 01:48:40
【问题描述】:
如果两个共享库都公开相同的全局范围符号,有没有办法检测和避免?我们最近遇到了libA.so 导出了SuperCoolMethod() 和libB.so 的情况,这也暴露了SuperCoolMethod() 这将破坏上述方法的先前副本。这是在使用 g++ 4.0 及更高版本的 Linux 上。因此,如果您单独链接libA.so,一切都会按预期工作,但是一旦将libB.so 添加到图片中,就会调用错误的方法,并且调用将失败,导致执行线程中止,而不会通知我们潜在的问题。经过反复试验,我们最终发现SuperCoolMethod() 被破坏并通知libB.so 的供应商,以便__attribute__((visibility("hidden"))) 可以应用于他们的方法副本。
【问题讨论】:
标签: c++ g++ shared-libraries