libpng警告:应用程序和库中的libpng版本不兼容

时间:2011-04-04 21:15:15

标签: c++ linux opencv png dynamic-linking

我有一个应用程序依赖于过多的库(不是我们所有的)。大多数这些库都是通过包管理器安装的。对于那些没有的,我已重新编译它们但我仍然得到相同的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

4 个答案:

答案 0 :(得分:4)

您的应用程序似乎是动态链接安装在您正在使用的标头之外的某个.so库文件。您可以ldd <binary>找出您的二进制文件正在拾取的.so,然后从该目录中获取头文件(除非它是系统目录)而不是您正在使用的那个。您可以通过在编译时更改-I标志来完成此操作。否则我认为您需要安装libpng-1.4.3,以便您可以针对其标题进行编译。

答案 1 :(得分:1)

Mark B已经解释过了。  现在加入Matteo

你的链接器会首次出现libpng。这似乎是嵌套的 在OpenCV中。查看您的Makefile并将您的本地版本放在之前 OpenCV包含在包含中。就我而言:

-I / usr / include / libpng12 -lpng12 [...] -L / usr / local / lib -lopencv_core

答案 2 :(得分:0)

正如您的问题所指出的,OpenCV 附带自己的libpng版本,但您可以选择使用系统上安装的libpng版本。您只能在从源代码构建OpenCV时执行此操作:在运行cmake时禁用BUILD_PNG。

答案 3 :(得分:0)

原因: OpenCV / CMakeLists.txt 文件:

OCV_OPTION(BUILD_PNG   "Build libpng from source"   WIN32 OR ANDROID OR APPLE)

enter image description here

ways:再次编译您的opencv,并使用以下参数:

cmake -D BUILD_PNG=ON (+your other params)
make
sudo make install