c++ - anaconda 重新安装后 OpenCV C++ 二进制文件中的链接器错误
问题描述
我重新安装了 python anaconda,现在我之前编译的 C++ OpenCV 应用程序不再工作。
当我尝试运行我的二进制文件时,出现以下错误:
dyld: Library not loaded: @rpath/libhdf5.101.dylib
Referenced from: /usr/local/lib/libopencv_hdf.4.0.0.dylib
Reason: image not found
[1] 5054 abort ./test
据我了解,这意味着 opencv 库尝试在运行时使用另一个动态 hdf5 库,但链接器找不到它。
解决方案
原因:
正如建议的那样,我使用otool -l /usr/local/lib/libopencv_hdf.4.0.0.dylib
并分析了它的输出。在那里,我发现最后一个LC_RPATH
指向我的旧 anaconda 安装,就我而言~/anaconda3/lib
。因此,OpenCV(我最初构建它的方式)依赖于我的 anaconda 安装的 HDF5 dylib。甚至 C++ 二进制文件也依赖于我的 python anaconda 安装。我之前只搜索了/usr/local/lib
没有产生任何结果的缺失库。当我删除旧的 anaconda 版本并安装更新的版本时,我不仅删除了库,而且 anaconda 现在也安装到了不同的路径中(现在~/opt/anaconda
而不是~/anaconda
)。
解决方案:
我想显而易见的解决方案是将@rpath 更改libopencv_hdf.4.0.0.dylib
为指向新安装。但是,较新的 ancaonda 版本带有较新的 libhdf5 版本,因此文件名不同。
相反,我在 @rpath 位置之一创建了一个软链接,以指向库的新安装。
两个版本都有效。所以要么:
ln -s ~/opt/anaconda3/lib/libhdf5.103.dylib /usr/local/lib/libhdf5.101.dylib
或(假设您已经创建了必要的目录):
ln -s ~/opt/anaconda3/lib/libhdf5.103.dylib ~/anconda3/lib/libhdf5.101.dylib
推荐阅读
- python - 没有使用熊猫在 plot() 函数中获取图表中的标签
- angular - Angular Material 6 在复选框和单选按钮上禁用波纹
- ms-access - Microsoft Access 多值
- java - 与 toObject 相对的 Firebase 或创建一个返回对象地图的方法
- javascript - Node.js:单击注册按钮不执行任何操作
- ios - 用户可以重置的 iOS 上的唯一标识符
- java - Java.Lang.NoClassDefFoundError android.arch.core.internal.FastSafeIterableMap
- react-native - 尝试初始化新应用程序时,React-native 语法错误意外令牌导入
- c++ - 无法更新作为列表中节点一部分的对象内的值
- python - tf.estimator.EvalSpec 中参数“throttle_secs”的行为,用于 tf.estimator.train_and_evaluate