我已阅读创建具有向后兼容库的线程使用Boost 的ABI,我现在试图了解如何链接共享库以保持稳定的ABI,并避免干扰符号的问题。

我创建了以下简单的测试项目: 通用标签

库common_v1和common_v2应该模拟库a和b的外部依赖关系(例如Boost)。因为common_v1和common_v2被视为外部库,所以我不希望不更改其构建系统(并且不更改其编译时使用的标志)。

上面的项目可以正常编译,但是不起作用!在执行测试应用程序时,它会跳入assert语句。

这使我相信liba和libb中使用了相同的common定义。为什么会这样,我在做什么错了?

有帮助吗?

解决方案

您可以使用 ld 在创建您的ab库时仅保留a()b()符号,因此这些库将不会导出common()符号(因此,一个库将不会尝试从另一个库中使用common()符号)。 : 通用标签

您还可以使用--version-script选项: 通用标签

version-scriptfile如下: 通用标签

相关线程:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top