【问题标题】:Using multiple versions of libboost on Linux Mint在 Linux Mint 上使用多个版本的 libboost
【发布时间】:2020-05-10 00:06:37
【问题描述】:

我正在使用 libboost 的 Linux Mint 上重新编译一些 C++ 代码。在从 Mint 18 升级到 Mint 19.3 之前,该代码运行良好。从那时起,我可以编译代码,但在执行过程中它失败,一个或多个调用 boost::filesytem::create_directories 产生错误

搜索'net,似乎问题可能是由于库版本不兼容,果然在安装 1.65 时,似乎有 1.58 的库在运行,例如在这个文件夹中 /usr/lib/x86_64-linux-gnu (或类似的东西)。

当我尝试像这样的网络解决方案时 sudo rm -f /usr/lib/x86_64-linux-gnu/libboost_* (然后重新安装) 要么 sudo rm -f /usr/lib/x86_64-linux-gnu/libboost_*.so.1.5.8.0

没有任何变化(即文件似乎与执行错误一样保持不变)。

当我重新运行之前编译代码的副本时,代码不会失败。

谁能建议我如何解决这个问题?我正在编译的代码很大,不是我自己的,所以我不知道从哪里开始更改函数调用。事实上,我不认为这是问题所在。我想我需要知道的是如何清除旧安装的残余和/或将所有内容重新指向最新安装。

FWIW,我已经尝试过这里的建议 Uninstall boost and install another version 它似乎并没有让我感动。

【问题讨论】:

  • 为什么你认为这是 boost 版本的问题,而不是不同的库?代码是静态链接还是动态链接?可以查看ldd使用了哪些动态库@
  • 我遇到了一个似乎有同样问题的评论(参考现已丢失)。当我使用您的建议时,我只看到对安装的最新版本 (1.65) 的引用。链接到版本 1.58 的代码的先前编译版本。源代码没有任何变化——我只是运行完全相同的编译命令。而且由于我没有发现任何对 create_directories 调用更改的引用,我认为唯一剩下的就是它链接到的库版本的问题。
  • 查看 boost 站点上的发行说明后发现,有一个与 create_directories 相关的修复程序,该修复程序已在 1.60 版中应用。我所做的是下载版本 1.58、1.60 和 1.72,将它们安装在各自的位置,这样我就不会踩到系统默认值 (1.65)。然后我使用 EXT_HINT 优先选择和验证运行 cmake 时使用的版本。与现有代码一起工作的唯一生成的二进制文件是版本 1.58 的二进制文件。所以我将把它留在那里(即针对 1.58 编译)并认为这已经解决了我的目的。

标签: c++ linux boost linux-mint


【解决方案1】:

(代表问题作者发布解决方案,以便将答案移动到答案空间)

解决了这个问题,不删除系统默认版本,而是在不同的位置安装其他版本,然后优先选择带有 EXT_HINT 标志的 cmake。

boost 网站建议(通过 1.60 的发行说明)修复了与 create_directories 的返回值相关的问题。在任何情况下,通过在编译期间指向 1.58 版本,而不是指向 1.60、1.65 或 1.72 版本,我都能够让代码“按原样”工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2018-03-05
    • 1970-01-01
    • 2019-01-31
    • 2017-09-10
    • 2016-12-06
    相关资源
    最近更新 更多