opencv的编绎问题真多呀,一般代码可能不存在问题,问题主要在工具,开源工具的版本,工具搭配,参数设置,都会影响最终的编绎成功
之前顺手编译一个2.49的,竟然非常顺,一个问题也没发现,换成3.3和2.4.13问题真多,总结一下。
当然,有时新版本也会出现问题。
1.OPENCV出了3.3,就下载下来编编试试。
出现问题,opencv的github查到解决方案,据说只在3.3才有
- OpenCV => 3.3.0-rc
- Operating System / Platform => Windows 10 - 64 Bit
- Compiler => Visual Studio 15 2017
- cmake => 3.9.0-rc5
大约会提示类似错误,windres.exe输入参数为空的样子 :
:\PROGRA~2\minGW\bin\windres.exe: invalid option -- W,
问题原因在cmake,cmake版本大于3.9会有这个问题,我的是3.8,没有这个问题,网上一个哥们说他的3.7也没有这个问题
解决这个问题,下面CMake option: ENABLE_PRECOMPILED_HEADERS=OFF
就这个了,好像也有提供cmake补丁的,或者cmake降级的,算了太麻烦:
2.编绎2.4.13时出现下面问题
C:\opencv\sources\modules\highgui\src\window_w32.cpp: In function 'int icvCreateTrackbar(const char*, const char*, int*, int, CvTrackbarCallback, CvTrackbarCallback2, void*)':
C:\opencv\sources\modules\highgui\src\window_w32.cpp:1853:81: error: 'BTNS_AUTOSIZE' was not declared in this scope
WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,
^
C:\opencv\sources\modules\highgui\src\window_w32.cpp:1853:97: error: 'BTNS_BUTTON' was not declared in this scope
WS_CHILD | CCS_TOP | TBSTYLE_WRAPABLE | BTNS_AUTOSIZE | BTNS_BUTTON,
^
modules\highgui\CMakeFiles\opencv_highgui.dir\build.make:187: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj' failed
mingw32-make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/src/window_w32.cpp.obj] Error 1
CMakeFiles\Makefile2:2198: recipe for target 'modules/highgui/CMakeFiles/opencv_highgui.dir/all' failed
mingw32-make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
Makefile:159: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
主要就是有几个变量没有找到,后来在一个opencv的issues里找到了解答,大概意思就是在mingw的头文件commctrl.h中,对于上面的变量宏的定义实际上是由_WIN32_IE是否定义来决定的,找到MingW\include\commctrl.h文件却发现,他的写法竟然是直接#if 0,问题很明显,这这个宏在原始状态是关闭的,把下面#if 0改成#if 1和0x0500就行了
#include <prsht.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _WIN32_IE
/* define _WIN32_IE if you really want it */
#if 0
#define _WIN32_IE 0x0300
#endif
#endif
3.今天在win7中配置opencv2.4.13 时报错 ,错误信息是:CMake Warning at cmake/OpenCVPackaging.cmake:23 (message): CPACK_PACKAGE_VER
原来这个参数是需要安装git客户端工具才能获得,所以装个git工具应该就可以解决问题,本人偷懒,根目录下cmake文件直接改了如下内容
if(NOT GIT_RESULT EQUAL 0)
set(OPENCV_VCSVERSION "unknown")
endif()
else()
# We don't have git:
# set(OPENCV_VCSVERSION "unknown")
set(OPENCV_VCSVERSION "2.4.13")
endif()
参考:
https://github.com/opencv/opencv/issues/9100
http://blog.csdn.net/chentianqiao555/article/details/41154977
http://www.cnblogs.com/lhyz/p/4621987.html
http://www.cnblogs.com/yangzifb/p/6755548.html
http://blog.csdn.net/mysea2004/article/details/72566730