首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >libpng警告:应用程序和库中的libpng版本不兼容

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

Stack Overflow用户
提问于 2011-04-05 05:15:15
回答 4查看 12.2K关注 0票数 11

我有一个应用程序,它依赖于过多的库(我们不都是这样)。这些库中的大多数是通过包管理器安装的。对于那些不是的,我重新编译了它们,但我仍然得到相同的libpng不兼容错误。

代码语言:javascript
复制
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

这是一个错误,因为结果缓冲区是空的。如何知道哪个库链接到新库,哪个库链接到旧库?

代码语言:javascript
复制
ldd <executable-name>

...
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f5a0660f000)
...

运行locate png.h会给出几个系统级的文件

代码语言:javascript
复制
/usr/include/png.h
/usr/include/libpng12/png.h

所有这些都是1.2.44。

我运行的是Ubuntu 11.04 x86-64。

更新:原来OpenCV附带了他们自己的libpng1.4.3版本

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-05 05:20:58

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

票数 5
EN

Stack Overflow用户

发布于 2013-05-23 16:17:52

Mark B已经解释过了。现在为Matteo准备好了

您的链接器获取libpng的第一次出现。它似乎嵌套在OpenCV中。在您的Makefile中查看一下,并在Includes中将本地版本的放在OpenCV的include之前。在我的例子中:

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

票数 1
EN

Stack Overflow用户

发布于 2012-11-12 11:20:18

正如您在问题中指出的,OpenCV确实附带了自己版本的libpng,但您可以选择使用系统上安装的libpng版本。只有在从源代码构建OpenCV时才能做到这一点:在运行cmake时禁用BUILD_PNG。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5544445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档