在全新的2014年来临的时候,伟大的OpenCV团队华丽丽地发布了OpenCV2.4.8,在面对2013年多次尝试静态屡败屡战,屡战屡败的惨痛经历后,终于还是决定再战一次,说不定这一次就能成功了呢。抱着这种可能这次会成功的态度,再次进行尝试吧。
下面言归正传,开始华丽丽的OpenCV静态编译之路。
环境:Windows 7 32位, cmake2.8.12.1, gcc使用的是tdm-gcc-4.8.1-3, OpenCV2.4.7.2(先使用OpenCV2.4.7.2练练手)。
安装好cmake和gcc,像编译OpenCV动态链接库一样设置好OpenCV源代码的目录,目的目录和指定好gcc的目录。不勾选BUILD_SHARED_LIBS选项,生成Makefile文件,进入到所在目录,make。
在编译进行到一定程度的时候,我这边会显示出现各种东西重复定义,例如‘std::runtime_error::runtime_error<std::string const&>’重复定义之类的问题,部分截图如下:
遇到这种情况,如果你已经安装了python的话,很大可能是因为你勾选了BUILD_opencv_pyhton的选项(我就是这种情况),不要勾选BUILD_opencv_pyhton,再次重新编译。
……再次漫长的等待,结果还是出现相同的错误,还是各种重复定义。
这个时候,我差点就崩溃了,但是,要淡定,要淡定,在不断的修改勾选的项目之后,我发现,只要不勾选BUILD_PERF_TESTS和BUILD_TESTS、BUILD_opencv_apps这三个选项后,就不会出现各种重复定义的问题了。
……再次漫长的等待,等待,又是一个重复,在经过了漫长的等待之后,终于出现了100%的效果了,终于编译通过了,好开心。截图如下:
普大喜奔啊,2014年第一件喜事啊,在2013年多次放弃之后,终于在2014年的一次坚持中得到好的结果了。
总结一下:对于编译静态OpenCV2.4.7.2库来说,只要不勾选BUILD_SHARED_LIBS、BUILD_opencv_pyhton、BUILD_PERF_TESTS、BUILD_TESTS和BUILD_opencv_apps,就能够在不出现错误的情况下完成编译。
当然,这个只是第一部分,编译出来的库能否正常使用,还需要不断地进行测试,我并没有开始使用静态库,所以这里也不好说编译出来的静态库一定没有问题,在我进行测试后再来和大家分享下是不是会出现什么其他问题。
在使用OpenCV2.4.8进行静态编译时,如果没有取消勾选的WITH_WIN32UI选项的话,会出现error:’MonitorFromRect’ was not declared in this scope hMonitor = MonitorFromRect<&rect, MONITOR_DEFAULTTONEARESY>’等情况,如下图:
出现这种情况,是编译器无法识别windows的API导致的。可以通过不勾选WITH_WIN32UI选项来避免这个问题。