共享库和Linux(elf)上的链接
-
29-10-2019 - |
题
我已阅读创建具有向后兼容库的线程使用Boost 的ABI,我现在试图了解如何链接共享库以保持稳定的ABI,并避免干扰符号的问题。
我创建了以下简单的测试项目: 通用标签
库common_v1和common_v2应该模拟库a和b的外部依赖关系(例如Boost)。因为common_v1和common_v2被视为外部库,所以我不希望不更改其构建系统(并且不更改其编译时使用的标志)。
上面的项目可以正常编译,但是不起作用!在执行测试应用程序时,它会跳入assert语句。
这使我相信liba和libb中使用了相同的common定义。为什么会这样,我在做什么错了?
解决方案
您可以使用 ld 在创建您的a
和b
库时仅保留a()
和b()
符号,因此这些库将不会导出common()
符号(因此,一个库将不会尝试从另一个库中使用common()
符号)。 :
通用标签
您还可以使用--version-script
选项:
通用标签
version-scriptfile
如下:
通用标签
相关线程:
不隶属于 StackOverflow