2011-08-24 23 views
0

这是一种难看的,但我坚持所以这里有云:highgui抱怨,它需要> = 17.0.0当我有20.0

我写一个动态库(以下简称“mylib.dylib '),它使用opencv(highgui和其他部分),最终由ffmpeg(libavfilter)加载。图书馆编译得很好。但是,当我尝试从ffmpeg的范围内,我收到以下错误dlopen的()的dylib:

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 /本地/ lib/libpng15.15.dylib

显然我在这里失踪的东西 - 诚然,我不是这些动态库如何链接的专家。所以如果我忘记包含一些相关的信息,请原谅。

UPDATE 我忘了提 - 当我通过了XCode(无dlopen的错误),这使我相信,它可能有一些做的一个环境变量Xcode是设置运行的ffmpeg的lib工作正常我不是。

谢谢!

SOLUTION 1.不要哑 我用的是甲基苯丙胺,因为我是通过PHP脚本调用的ffmpeg,它是使用了自己的一套dylibs,这(惊喜惊喜)包括的libpng 16.0.0

回答

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)。

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

因此,无论你不必libpng,则原本当您建立OpenCV的,或者对建立比一了libpng,其他的版本一个在/ usr/local/lib中(如可能是/ opt/local/lib中的一个)。如果是这种情况,你需要确保你正在构建你想要使用的版本。如何做到这一点取决于你的构建方法(MacPorts或cmake)。我为其他库使用cmake for OpenCV和MacPorts,这就是为什么我的系统中两者不同步。

+0

我卸载使用make的libpng和OpenCV(也没有任何剩余的文件手动搜索),然后重新安装的libpng-1.5.4,然后OpenCV的-2.3 0.1。我检查了OpenCV的CMakeCache.txt并确保它指向libpng的全新版本。仍然出现错误,只是现在升级到20.0.0+,而之前只是想要17.0.0+! 那么也许在正确的轨道上?我不使用MacPorts或类似的东西,而且我最近在升级到Lion时做了干净的安装,所以如果我有另一个版本的libpng浮动,我不知道它会在哪里。 – jefftimesten

1

只是为那些谁需要的代码:

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