11

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

4 回答 4

5

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

于 2011-04-04T21:20:57.693 回答
1

Mark B 已经解释过了。现在再次为马特奥

您的链接器获取 libpng 的第一个外观。这似乎嵌套在 OpenCV 中。查看您的 Makefile 并将您的本地版本放在包含 OpenCV 的 Includes 之前。就我而言:

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

于 2013-05-23T08:17:52.030 回答
0

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

于 2012-11-12T03:20:18.093 回答
0

原因: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
于 2019-03-14T06:43:13.000 回答