自制软件 + opencv + libpng 出错

Posted

技术标签:

【中文标题】自制软件 + opencv + libpng 出错【英文标题】:Error with homebrew + opencv + libpng 【发布时间】:2015-03-23 08:17:19 【问题描述】:

在 Mac OS Maverick 上,我安装了带有 brew install opencv 的 OpenCV。

我创建了一个简单的程序(复制自this tutorial)。编译工作正常,但运行可执行文件时出现以下错误:

dyld: Library not loaded: /usr/local/lib/libpng16.16.dylib
  Referenced from: /usr/local/lib/libopencv_highgui.2.4.dylib
  Reason: Incompatible library version: libopencv_highgui.2.4.dylib requires version 33.0.0 or later, but libpng16.16.dylib provides version 32.0.0
Trace/BPT trap: 5

我检查了libpng 是否通过brew install libpng 正确安装并运行brew upgrade 以确保一切都是最新的。

运行locate libpng16.dylib 返回:

/Applications/GIMP.app/Contents/Resources/lib/libpng16.16.dylib
/usr/local/Cellar/libpng/1.6.10/lib/libpng16.16.dylib
/usr/local/Cellar/libpng/1.6.12/lib/libpng16.16.dylib
/usr/local/Cellar/libpng/1.6.13/lib/libpng16.16.dylib
/usr/local/Cellar/libpng/1.6.15/lib/libpng16.16.dylib
/usr/local/lib/libpng16.16.dylib

有什么想法吗?

【问题讨论】:

为什么要投反对票? 【参考方案1】:

最好的解决方案是完全卸载 libpng 并重新安装:

$ sudo brew uninstall libpng
$ sudo rm '/usr/local/bin/libpng-config'
$ for i in `brew link --overwrite --dry-run libpng`; do sudo rm $i; done
$ sudo brew install libpng

如果需要安装opencv:

$ sudo brew tap homebrew/science
$ sudo brew install opencv

【讨论】:

【参考方案2】:

Homebrew 应该确保您安装了正确的依赖项。但是,您可能在不同的路径上安装了多个版本的libpng16。看看...

/usr/lib
/opt/local/lib

如果您在这些位置找到任何版本的库,那么它们可能会导致在您的程序启动时加载错误的版本。作为快速修复,您可以尝试在命令行上的程序名称前输入DYLD_LIBRARY_PATH=/usr/local/lib。从长远来看,您可能需要完全删除冲突的版本。

【讨论】:

我的/usr/local/Cellar/libpng 文件夹中有多个版本的libpng16(但在/usr/lib/opt/local/lib 中没有)。 /usr/locale/lib 中的那个(显然是由 dylib 加载的)是/usr/local/Cellar/libpng/1.6.16 中最新版本的符号链接)。所以它看起来对我来说是正确的,不是吗? 如果其他地方没有其他版本,那么它看起来不像是版本冲突。看来您需要更新版本的libpng。我原以为 Homebrew 会安装正确的依赖项 你是对的。我刚刚下载、构建并安装了最新版本的libpng,它现在可以正常工作了。谢谢。 刚刚有相同的更新brew update && brew upgrade libpng 为我工作。从libpng.1.6.15 升级到libpng.1.6.16 我的问题也与opencv 相关。 删除brew的libpng,下载源码编译成功【参考方案3】:

此答案适用于通过 Conda 安装的 OSX 用户,更具体地说是 conda-forge 频道(我不确定其他人)。

Conda 最终会在环境中安装自己的 libpng,您可以使用 conda upgrade libpng 对其进行更新。

我猜这基本上是 conda-forge 上的 opencv 配方的一个错误。

【讨论】:

以上是关于自制软件 + opencv + libpng 出错的主要内容,如果未能解决你的问题,请参考以下文章

使用自制软件在 Mac OS X 10.9 中构建 OpenCV_Python

OSX + homebrew + CMake + libpng 版本不匹配问题

Android:删除 OpenCV 旧版本将解决 Libpng 漏洞警告?

加载共享库 libpng16 时出错

ubuntu 依赖问题

官方 AnacondaRecipes/opencv-feedstock 的 conda-build 无法查找 libpng.h