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

Dat*_*Chu 7 c++ linux png opencv 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
Run Code Online (Sandbox Code Playgroud)

这是一个错误,因为生成的缓冲区为空.我如何知道哪个库链接到新库以及哪个库链接到旧库?

ldd <executable-name>

...
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f5a0660f000)
...
Run Code Online (Sandbox Code Playgroud)

运行locate png.h给了我几个系统级文件

/usr/include/png.h
/usr/include/libpng12/png.h
Run Code Online (Sandbox Code Playgroud)

所有这些都是1.2.44.

我正在运行Ubuntu 11.04 x86-64.

更新:OpenCV附带自己的libpng版本1.4.3

Mar*_*k B 5

看起来您的应用程序正在动态链接.so安装在您使用的标头以外的其他位置的库文件。您可以确定您的二进制文件正在获取ldd <binary>哪个.so,然后从该目录(除非它是系统目录)而不是您正在使用的目录中获取头文件。您可以通过-I在编译时更改标志来做到这一点。否则我认为您需要安装libpng-1.4.3以便您可以针对其标头进行编译。