OpenCV3.2.0编译X86的VS2010(vc10)库文件
由于需要,现在VS2010上使用OpenCV3.2.0相关库,官方自带的只有X64版本的vc14(vs2015)相关文件。所以只能自己动手了。
参考链接:
- http://blog.csdn.net/zengraoli/article/details/70185803
- http://blog.csdn.net/Kelvin_Yan/article/details/53635641
在解压opencv3.2.0的库文件(运行exe)后,会解压出如下的目录
build/x64/vc14
目录下就是官方提供一些编译好的文件,sources
就是源文件了。
下载编译需要的软件CMake:https://cmake.org/download/
我选用的是目前最新的3.9.0
版本。安装好之后运行cmake-gui.exe
启动软件。第一行选择源码目录,即刚刚提到的sources
目录,第二行选择输出目录,即编译生成文件的存放目录。选择完毕就点击下方的第一个按钮configure
,会弹出一个选择版本的框。这里就选32位的vs2010版本。
选好之后点击Finsh,在静静的等待和忍耐之后发现卡在下载一个lib文件的地方,然后毫无意外的发生错误。大概如下(这段错误是我别处贴过来的):
CMake Warning at cmake/OpenCVUtils.cmake:872 (message):
Download: Local copy of opencv_ffmpeg.dll has invalid MD5 hash:
3a56b0b26c0d56457a990eb00d87f889 (expected:
89c783eee1c47bfc733f08334ec2e31c)
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
Downloading opencv_ffmpeg.dll...
CMake Error at cmake/OpenCVUtils.cmake:895 (file):
file DOWNLOAD HASH mismatch
for file: [D:/opencv/310/opencv/sources/3rdparty/ffmpeg/downloads/89c783eee1c47bfc733f08334ec2e31c/opencv_ffmpeg.dll]
expected hash: [89c783eee1c47bfc733f08334ec2e31c]
actual hash: [56c56445ab47e8ff52bda82ce1c0a798]
status: [28;"Timeout was reached"]
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
CMake Error at cmake/OpenCVUtils.cmake:899 (message):
Failed to download opencv_ffmpeg.dll. Status=28;"Timeout was reached"
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
Configuring incomplete, errors occurred!
See also "D:/opencv/310/mybuild/CMakeFiles/CMakeOutput.log".
See also "D:/opencv/310/mybuild/CMakeFiles/CMakeError.log".
看来是被墙了,那就自己下载这个文件吧。编辑器打开sources/3rdparty/ffmpeg/ffmpeg.cmake
:
# Binary branch name: ffmpeg/master_20161202
# Binaries were created for OpenCV: 594c136d1fcbb5816c57516e50f9cbeffbd90835
set(FFMPEG_BINARIES_COMMIT "2a19d0006415955c79431116e4634f04d5eb5a74")
set(FFMPEG_FILE_HASH_BIN32 "f081abd9d6ca7e425d340ce586f9c090")
set(FFMPEG_FILE_HASH_BIN64 "a423363a6eb76d362ca6c406c96c8db6")
set(FFMPEG_FILE_HASH_CMAKE "5346ae1854fc7aa569a722e85af480ec")
set(FFMPEG_DOWNLOAD_URL ${OPENCV_FFMPEG_URL};$ENV{OPENCV_FFMPEG_URL};https://raw.githubusercontent.com/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/)
ocv_download(PACKAGE opencv_ffmpeg.dll
HASH ${FFMPEG_FILE_HASH_BIN32}
URL ${FFMPEG_DOWNLOAD_URL}
DESTINATION_DIR ${CMAKE_CURRENT_LIST_DIR})
ocv_download(PACKAGE opencv_ffmpeg_64.dll
HASH ${FFMPEG_FILE_HASH_BIN64}
URL ${FFMPEG_DOWNLOAD_URL}
DESTINATION_DIR ${CMAKE_CURRENT_LIST_DIR})
ocv_download(PACKAGE ffmpeg_version.cmake
HASH ${FFMPEG_FILE_HASH_CMAKE}
URL ${FFMPEG_DOWNLOAD_URL}
DESTINATION_DIR ${CMAKE_CURRENT_LIST_DIR})
include(${CMAKE_CURRENT_LIST_DIR}/ffmpeg_version.cmake)
应该能看出点什么来,好,我们自己把下载的地址拼出来~~(建议用NotePad++之类的编辑器,在选中相同变量时有高亮提示,拼接更轻松哦-_-||)!https://raw.githubusercontent.com/opencv/opencv_3rdparty/2a19d0006415955c79431116e4634f04d5eb5a74/ffmpeg/opencv_ffmpeg.dll
,这是我这个版本拼出来的,然后用浏览器手动翻墙下载,cmake文件也有md5信息,下好了可以比较下。确认下载无误后替换sources/3rdparty/ffmpeg/downloads/f081abd9d6ca7e425d340ce586f9c090/
中下载错误的文件,f081abd9d6ca7e425d340ce586f9c090
可能每个人都不一样,但是里面的文件名是一样的,找到对应的,替换掉就好,然后重启cmake再次configure(cmake文件中有各种版本,可以下载需要的版本)。嗯,再次报错
这次是个压缩包,不过和之前一样操作就行了。
经过一系列手工操作,终于完成configure了,然后会在上面显示Name和Value的两列配置,可以根据需要选择。
需要注意的是,如果想和官方一样将lib和dll文件都合并到一起,可以勾选opencv_world
选项。这样生成的lib都合到一起方便配置和使用,如opencv_world320.lib
和opencv_world320.dll
这样的。
配置好了点击Generate开始生成。这里倒是一路畅通无阻,爽。完成之后打开文件夹,发现生成了VS2010的工程,用VS2010打开后准备编译。
在VS2010资源管理器的解决方案上右键,生成解决方案,需要注意此时VS的设置是不是需要的Release/Win32,如果需要Debug版本则要切换,如果两个版本都需要那就编译两次吧。时间可能会比较长。静静的等待和忍耐。
最终在项目的bin
和lib
目录下选择需要的文件即可。