共享对象与提升program_options静态链接;应用程序链接共享



我正在开发一个静态链接我们的 boost 依赖项的库,这样我们就不必担心与用户冲突。

我们的图书馆静态链接

  • date_time
  • 系统
  • 线
  • 正则表达式
  • 文件系统
  • 程序选项

然后,我们有一个可执行文件,它也需要动态program_options和链接。

当我们运行可执行项时,我们得到了双倍免费。

我们可以采取不将我们的代码链接到program_options的解决方案,实际上我们不需要这样做,但我想知道为什么会发生这种情况以及如何防止它继续下去。

答案是"不要静态地将您的库与 boost 链接"吗?如果是这样,那么存在什么样的策略来确保我的提升和你的提升很好地协同工作?如果答案是"有一些不应该是静态的提升库",那么是否有列表?

在构建 boost 时,我能够通过使用 GCC 的-fvisibility=hidden来解决双重释放问题。

有关详细信息,请参阅:

  • 静态库加载了两次
  • https://lists.boost.org/boost-users/2015/01/83575.php

最新更新