OpenCV库依赖libpng版本

时间:2014-09-03 14:36:12

标签: c++ opencv

OpenCV曾经在我的Mac OS(10.9,Mavericks)上正常工作。但升级依赖库 libpng 后出现了一些问题。对于一个简单的程序:

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main( int argc, char** argv )
{
  Mat image;
  image = imread( argv[1], 1 );

  if( argc != 2 || !image.data )
    {
      printf( "No image data \n" );
      return -1;
    }

  namedWindow( "Display Image", CV_WINDOW_AUTOSIZE );
  imshow( "Display Image", image );

  waitKey(0);

  return 0;
}

由CMake顺利编译。但是当我运行它时,错误弹出:

dyld: Library not loaded: /usr/local/opt/libpng/lib/libpng15.15.dylib
Referenced from: /usr/local/lib/libopencv_highgui.2.4.dylib Reason:
image not found 
Trace/BPT trap: 5

我检查了目录/ usr / local / opt / libpng / lib /。似乎当前版本的libpng是16,因为有符号链接,如

libpng.a          libpng16.16.dylib libpng16.dylib
libpng.dylib      libpng16.a        pkgconfig

我尝试过“brew upgrade opencv”,而opencv是最新版本(2.4.9)。通常opencv应该支持libpng16,因为它是最新的。我不知道libpng15和libpng16之间的区别。我应该卸载这个libpng16并安装libpng15吗?怎么做?

2 个答案:

答案 0 :(得分:0)

实际上我通过安装另一个版本的libpng(libpng15)解决了这个问题,这似乎是当前opencv版本(2.4.9)所需要的。

答案 1 :(得分:0)

您应该针对新的libpng重新编译OpenCV,因为它会更改其ABI版本(更改了dylib名称)。如果您通过自制软件安装了这个,我会说它的包中存在问题(除非这种升级需要手动干预,即根据新库版本重新编译依赖二进制文件)。