【发布时间】: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