我正在开发一个静态链接我们的 boost 依赖项的库,这样我们就不必担心与用户冲突。
我们的图书馆静态链接
- date_time
- 系统
- 线
- 正则表达式
- 文件系统
- 程序选项
然后,我们有一个可执行文件,它也需要动态program_options和链接。
当我们运行可执行项时,我们得到了双倍免费。
我们可以采取不将我们的代码链接到program_options的解决方案,实际上我们不需要这样做,但我想知道为什么会发生这种情况以及如何防止它继续下去。
答案是"不要静态地将您的库与 boost 链接"吗?如果是这样,那么存在什么样的策略来确保我的提升和你的提升很好地协同工作?如果答案是"有一些不应该是静态的提升库",那么是否有列表?
在构建 boost 时,我能够通过使用 GCC 的-fvisibility=hidden
来解决双重释放问题。
有关详细信息,请参阅:
- 静态库加载了两次
- https://lists.boost.org/boost-users/2015/01/83575.php