【问题标题】:highgui complaining that it needs >=17.0.0 when I have 20.0当我有 20.0 时,highgui 抱怨它需要 >=17.0.0
【发布时间】:2011-08-24 23:25:00
【问题描述】:

这有点难看,但我被困住了,所以就这样吧:

我正在编写一个使用 opencv(highgui 和其他部分)并最终由 ffmpeg(libavfilter)加载的动态库(此后称为“mylib.dylib”)。该库编译得很好。但是当我尝试从 ffmpeg 中对 dylib 进行 dlopen() 时,出现以下错误:

mylib.dylib: dlopen(mylib.dylib, 2): Library not loaded: /usr/local/lib/libpng15.15.dylib
  Referenced from: /usr/local/lib/libopencv_highgui.2.3.dylib
  Reason: Incompatible library version: libopencv_highgui.2.3.dylib requires version 17.0.0 or later, but libpng15.15.dylib provides version 16.0.0

但是,当我运行 otool -L /usr/local/lib/libpng15.15.dylib 时,我得到以下信息:

/usr/local/lib/libpng15.15.dylib:
  /usr/local/lib/libpng15.15.dylib (compatibility version 20.0.0, current version 20.0.0)
  /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
  /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)

上次查了一下,20.0.0 比 17.0.0 晚,highgui 说需要这个。

我认为这可能是一个架构问题(我在运行 Lion 的 Mac 上,所以我遇到了很多关于 i386/x86_64 的问题),但是在所有库上运行“文件”显示一切(highgui , libpng, mylib) 是 Mach-O 64 位动态链接共享库 x86_64

我想也许在我的系统某处隐藏了其他版本的 libpng,但 dlopen 错误特别指向 /usr/local/lib/libpng15.15.dylib

这里显然缺少一些东西——诚然,我不是这些动态库如何链接的专家。因此,如果我忘记包含一些相关信息,请见谅。

更新 我忘了提——当我通过 XCode 运行 ffmpeg(没有 dlopen 错误)时,lib 工作正常,这让我相信它可能与 XCode 设置的环境变量有关,而我不是。

谢谢!

解决方案 1.别傻了 我使用的是 MAMP,因为我通过 php 脚本调用 ffmpeg,所以它使用了自己的一组 dylib,其中(惊喜)包括 libpng 16.0.0

【问题讨论】:

    标签: c macos opencv dlopen libpng


    【解决方案1】:

    在我卸载了所有 MacPorts 并安装了更新版本后,我最近遇到了类似的情况。问题在于 libpng 的版本(1.2 vs 1.4 vs 1.5),而不仅仅是兼容性版本。我已经针对 libpng 1.4(即 libpng14)构建了 OpenCV。我以为我可以只使用 install_name_tool 让它查看 libpng 1.5 (libpng15),但这不起作用。我最终针对库的当前版本重建了 OpenCV。效果很好(在我记得 sudo cmake install 之后)。

    (上面的某些版本号可能不正确,但要点是准确的。)

    因此,要么您没有构建 OpenCV 时最初拥有的 libpng 版本,要么它针对 /usr/local/lib 中的 libpng 以外的 libpng 构建(例如 /opt/local/lib 中的那个)。如果是这种情况,您需要确保针对您要使用的版本进行构建。如何做到这一点取决于您的构建方法(MacPorts 或 cmake)。我将 cmake 用于 OpenCV,将 MacPorts 用于其他库,这就是为什么两者在我的系统上不同步的原因。

    【讨论】:

    • 我使用 make 卸载了 libpng 和 opencv(并手动搜索了所有剩余文件),然后重新安装了 libpng-1.5.4,然后是 OpenCV-2.3.1。我检查了 OpenCV 的 CMakeCache.txt 并确保它指向全新版本的 libpng。仍然出现错误,只是现在它升级到了 20.0.0+,而之前它只想要 17.0.0+!所以也许在正确的轨道上?我不使用 MacPorts 或类似的东西,而且我最近升级到 Lion 时刚刚进行了全新安装,所以如果我有另一个版本的 libpng 浮动,我不知道它会在哪里。
    【解决方案2】:

    仅适用于需要代码的人:

    cd  /Applications/MAMP/Library/lib
    mv libpng15.15.dylib libpng15.15.dylib_old
    ln -s /usr/X11/lib/libpng15.15.dylib .
    

    【讨论】:

      猜你喜欢
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2020-03-12
      • 2020-01-25
      相关资源
      最近更新 更多