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 &lt;binary&gt; 找出您的二进制文件正在获取哪个.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 警告,问题解决

libpng warning: iCCP: known incorrect sRGB profile 警告,问题解决

在Cocos2dx中初始化粒子效果后的警告-“ libpng警告:iCCP:已知错误的sRGB配置文件”