[gentoo]搞定opencv

之前的基于opencv的应用,在换了gentoo之后,读取png的图片的时候会提示:

libpng warning: Application was compiled with png.h from libpng-1.2.29
libpng warning: Application  is  running with png.c from libpng-1.4.5
写了个脚本之后,发现这个应用依赖的png库都是1.4.5的。上面的提示是libpng在编译时指定错了版本。虽然我本地有1.2和1.4两个版本的libpng,但是头文件只有1.4的。仔细看了下编译完的目录,通过搜索png.h这个关键字,发现竟然以来了opencv里面自带的libpng。按理说如果发现了系统的libpng之后,就不应该再用自带的libpng了。最后在highgui模块的cmakelists.txt文件中发现了这些内容:
if(WITH_JPEG)
add_definitions(-DHAVE_JPEG)
if(NOT JPEG_FOUND)
set(use_3rdparty TRUE)
endif()
endif()
if(WITH_PNG)
add_definitions(-DHAVE_PNG)
if(NOT PNG_FOUND)
set(use_3rdparty TRUE)
endif()
endif()
if(WITH_TIFF)
add_definitions(-DHAVE_TIFF)
if(NOT TIFF_FOUND)
set(use_3rdparty TRUE)
endif()
endif()
if(WITH_JASPER)
add_definitions(-DHAVE_JASPER)
if(NOT JASPER_FOUND)
set(use_3rdparty TRUE)
endif()
endif()
if(use_3rdparty)
    include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty/include")
endif()
也就是说,这几个库里面任意一个没有的话,都会把3rdparty/include这个目录加入到头文件的搜索目录中。gentoo在emerge的时候,默认是没有USEjpeg2k的,也就是不使用系统的jasper库,导致引用了自带的png.h。
找到了原因之后,解决起来就很方便了,在emerge opencv之前,确保把jpeg2k加入到USE中即可。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据