【发布时间】:2018-01-15 13:31:40
【问题描述】:
我正在开发一个静态链接我们的 boost 依赖项的库,这样我们就不必担心与用户发生冲突。
我们的库静态链接
- 日期时间
- 系统
- 线程
- 正则表达式
- 文件系统
- 程序选项
然后我们有一个可执行文件,它也需要 program_options 和动态链接。
当我们运行可执行文件时,我们将获得双重释放。
我们可以采取不将我们的代码与 program_options 链接的解决方案,实际上我们不需要这样做,但我想知道为什么会发生这种情况以及如何防止它继续发生。
答案是“不要静态链接你的库和 boost”吗?如果是这样,那么存在什么样的策略来确保我的助推器和你的助推器一起玩得很好?如果答案是“有一些不应该是静态的 boost 库”,那么是否有一个列表?
【问题讨论】:
-
您的库是如何分布的?您是否可以控制用户如何链接和分发客户端应用程序?
-
这与静态与动态链接无关。你有一个双重释放的错误:“我们然后有一个可执行文件......”就像你的代码中的所有错误一样,你需要找到并修复它。首先查找/删除所有原始拥有指针并用智能指针替换它们。
-
静态和动态链接的库不能交互。所以问题是你打了两次免费电话。
-
我们无法控制用户链接的方式。我们采用静态链接 boost 因为我们无法说服我们的客户使用特定版本。我已经通过 valgrind 运行了这个,所有错误都出现在 boost/glibc 中,而不是我们的库代码我们的代码或可执行文件中没有原始指针。
-
@MikeK。你有没有得到这个答案?我也面临这个问题。 11 个月后,所以我希望你能解决一些问题。