首页 > 解决方案 > 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 库,但链接器找不到它。

标签: c++macosopencvanaconda

解决方案


原因:

正如建议的那样,我使用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


推荐阅读