【发布时间】: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