1

首先我知道有几个类似的帖子,但我还是要问。Debian "Buster" 和 Boost 1.67 软件包中的 boost program_options::options_description 是否存在已知问题?

我有在 Debian 7 中开发的代码,系统升级到 8.3,然后是 8.11,现在使用 Boost 1.55。

代码构建并运行。现在使用 Boost 1.67 将系统升级到 Debian Buster,并获取未解决的对 options_description(const std::string& , unsigned int, unsigned int) 引用的链接错误以及其他几个 program_options 函数。所有未解决的,除了 options_description,都来自 boost 调用另一个 boost 函数,所以甚至没有直接从我的代码中调用。boost_program_options 在链接行中。我不是新手,了解链接顺序,这与链接顺序无关。我将尝试获取 boost 和构建的源代码,看看它是否有效,如果没有,我将从头开始构建一个系统并针对它进行测试。由于这一切都在一个封闭的网络上,只是说尝试更新版本的 boost 或 Debian 不是一种选择,因为我有合同义务只使用 Debian”

所以就这个问题而言,Buster 中的 Boost 开箱即用版本是否存在问题?

4

1 回答 1

0

我认为 Buster 中的包裹不会有问题。

我最好的选择是

  1. 您正在将旧对象与新库重新链接-它们不匹配(您是否进行了完整的清理以消除这种可能性?)。

    构建系统通常不会完全依赖头文件,因此构建系统可能不会注意到 boost 头文件发生了变化,因此需要重新构建对象。

  2. 如果这不能解释它,则包含路径上可能有另一个版本的 boost,即使在重建时也会导致与 #1 下相同的问题。

    您可以通过检查命令行(make -Bsncompile_commands.json例如取决于您的工具)来确定这一点。另一个技巧是包含boost/version.hpp并查看BOOST_VERSION评估结果

  3. 最后,可能存在使用不同编译器版本或编译器标志构建库的问题,从而导致不兼容的 synbols(这是您可能希望向 Boost 开发人员报告的 QoI 问题)。

    这是假设 ABI/ODR 问题,以防您想验证这种可能性。

于 2020-05-22T21:57:35.163 回答