libpng warning:Application built with 1.6.17 but running with 1.5.12
关于opencv移植报libpng版本不一致的错误,我之前一直以为程序运行时找到的libpng库为目标机上的libpng1.5.12版本,可是后来 在该系统里找了半天没找到该版本的libpng,最后才想明白这个错误是opencv交叉编译时的问题,原来是在cmake时我指定了内置的png,在opencv目录下的3rdparty/libpng/README文件中就能看到该版本信息:
找到问题所在就好办多了,只要重新编译opencv并且编译时禁止使用内置PNG即可,让它去找系统中的libpng1.6.17。
我是使用cmake-gui图形化界面配置opencv编译选项的,在配置界面去掉BUILD_PNG和WITH_PNG对勾:
这样生成的Makefile文件中不会出现libpng,而我选中的tiff则会出现:
这样最后生成的opencv库则使用的是1.6.17版本的libpng,再把使用到的库放到目标机上,运行正常。还有一点就是,不管是目标机还是配置交叉编译的机子,系统中必须保证已经安装了同一版本的libpng,否则可能还会出错。
最后一点,移植的Qt程序按钮图片不显示才报的这个警告,因此当时我没考虑是opencv库的问题,现在想想也还是不太明白,我查过程序依赖的libpng库,确实是1.6.17版本的,可界面图标就是不显示,而把opencv编译过之后就正常了,这两者为什么会有联系?难道是在内部处理图片数据时Qt和opencv发现这个libpng版本不一样就都不用了?