libpng 警告:应用程序和库中的 libpng 版本不兼容
Posted
技术标签:
【中文标题】libpng 警告:应用程序和库中的 libpng 版本不兼容【英文标题】:libpng warning: Incompatible libpng version in application and library 【发布时间】:2011-04-04 21:15:15 【问题描述】:我有一个依赖于大量库的应用程序(不是我们所有人)。大多数这些库都是通过包管理器安装的。对于那些不是的,我已经重新编译了它们,但我仍然得到相同的 libpng 不兼容错误。
libpng warning: Application was compiled with png.h from libpng-1.2.44
libpng warning: Application is running with png.c from libpng-1.4.3
这是一个错误,因为结果缓冲区是空的。我如何知道哪个库链接到新库以及哪个库链接到旧库?
ldd <executable-name>
...
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f5a0660f000)
...
运行 locate png.h
给了我几个系统级文件
/usr/include/png.h
/usr/include/libpng12/png.h
都是1.2.44。
我正在运行 Ubuntu 11.04 x86-64。
更新:原来 OpenCV 附带了他们自己的 libpng 版本,即 1.4.3
【问题讨论】:
@Dat Chu - 我遇到了同样的问题,因为你发现 OpenCV 提供了他们自己的 libpng 版本,我应该怎么做才能正确编译我的代码?以下 2 条建议中的哪一条是你跟随?感谢您的帮助! 【参考方案1】:看起来您的应用程序正在动态链接一个.so
库文件,该库文件安装在您正在使用的标头之外的某个位置。您可以ldd <binary>
找出您的二进制文件正在获取哪个.so
,然后从该目录(除非它是系统目录)而不是您正在使用的目录中获取头文件。您可以通过在编译时更改 -I
标志来做到这一点。否则我认为您需要安装 libpng-1.4.3
以便您可以针对其标头进行编译。
【讨论】:
【参考方案2】:Mark B 已经解释过了。 现在再次为 Matteo 服务
您的链接器获取 libpng 的第一个外观。这似乎是嵌套的 在 OpenCV 中。查看您的 Makefile 并将您的本地版本放在 之前 在 Includes 中包含 OpenCV。就我而言:
-I/usr/include/libpng12 -lpng12 [ ... ] -L/usr/local/lib -lopencv_core
【讨论】:
【参考方案3】:正如您在问题中指出的那样,OpenCV 确实附带了自己的 libpng 版本,但您可以选择使用系统上安装的 libpng 版本。您只能在从源代码构建 OpenCV 时执行此操作:在运行 cmake 时禁用 BUILD_PNG。
【讨论】:
【参考方案4】:原因:OpenCV/CMakeLists.txt文件:
OCV_OPTION(BUILD_PNG "Build libpng from source" WIN32 OR android OR APPLE)
方式:再次编译你的opencv,并使用这个参数:
cmake -D BUILD_PNG=ON (+your other params)
make
sudo make install
【讨论】:
以上是关于libpng 警告:应用程序和库中的 libpng 版本不兼容的主要内容,如果未能解决你的问题,请参考以下文章
Android:删除 OpenCV 旧版本将解决 Libpng 漏洞警告?
libpng warning:iCCP:known incorrect sRGB profile
libpng 警告:在 Python/PyGame 中使用 png_read_image 时应打开隔行处理
libpng warning: iCCP: known incorrect sRGB profile 警告,问题解决