利用CMake生成OpenCV-3.2.0的VS2013工程(解决方案)的失败过程记录...

博主尝试使用Cmake构建OpenCV-3.2.0源码,过程中遇到了Cmake错误,主要是文件下载哈希值不匹配。通过查找并替换缺失文件,解决了OpenCV源码及扩展库中多个文件的下载问题,包括opencv_ffmpeg.dll、opencv_ffmpeg_64.dll、ffmpeg_version.cmake、ippicv_windows_20151201.zip以及xfeatures2d模块的相关文件。尽管最后在编译扩展库时仍遇到vgg_generated_64.i的哈希值错误,但已掌握了解决此类问题的方法。

承接博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/125098843,本次博主用OpenCV-3.2.0的源码进行Cmake,希望能成功。

先到官网下载OpenCV-3.2.0的源码,当前时间2022-06-02下它在第6页,链接如下:
https://opencv.org/releases/page/6/
在这里插入图片描述
百度网盘下载链接:
链接:https://pan.baidu.com/s/1yGdUnk29_nrDNw2KM3tLgw?pwd=fhdv

然后把它的扩展库源码也下载好。
github下载链接如下:
https://github.com/opencv/opencv_contrib/releases/tag/3.2.0
百度网盘下载链接如下:
链接:https://pan.baidu.com/s/1s6EaatW2b_FXOemgpTGG1g?pwd=k4qd

下载完成后,创建相关目录并解压。
在这里插入图片描述
打开Cmake,然后按下面的截图操作:
在这里插入图片描述
在这里插入图片描述
很快报错,报错如下:

CMake Error at cmake/OpenCVCompilerOptions.cmake:21 (else):
  Flow control statements are not properly nested.
Call Stack (most recent call first):
  CMakeLists.txt:495 (include)

Flow control statements are not properly nested.
翻译过来的意思是:未正确嵌套流程控制语句。每个语言的流程控制语句都是那几个,if…else…是最主要的,我们去看一下是不是这条语句出问题了。

打开文件:F:\build-opencv3.2.0\opencv-3.2.0\cmake\OpenCVCompilerOptions.cmake
在这里插入图片描述
看下第21行
在这里插入图片描述
我去,这是谁写的,怎么同一个if下有两个else呢 直接把第二个else去掉吧,即把第21行第22行注释掉吧。
在这里插入图片描述
继续configure,依然是缺那几个文件:

Downloading opencv_ffmpeg.dll...
CMake Error at cmake/OpenCVUtils.cmake:1043 (file):
  file DOWNLOAD HASH mismatch

    for file: [F:/build-opencv3.2.0/opencv-3.2.0/3rdparty/ffmpeg/downloads/f081abd9d6ca7e425d340ce586f9c090/opencv_ffmpeg.dll]
      expected hash: [f081abd9d6ca7e425d340ce586f9c090]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [6;"Couldn't resolve host name"]

Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:219 (include)
  CMakeLists.txt:557 (include)


CMake Error at cmake/OpenCVUtils.cmake:1047 (message):
  Failed to download opencv_ffmpeg.dll.  Status=6;"Couldn't resolve host
  name"
Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:219 (include)
  CMakeLists.txt:557 (include)

按这个报错先去找到hash值为f081abd9d6ca7e425d340ce586f9c090的opencv_ffmpeg.dll了。

找到了,然后放于文件夹
F:/build-opencv3.2.0/opencv-3.2.0/3rdparty/ffmpeg/downloads/f081abd9d6ca7e425d340ce586f9c090/

在这里插入图片描述
继续configure…
又报错:

Downloading opencv_ffmpeg_64.dll...
CMake Error at cmake/OpenCVUtils.cmake:1043 (file):
  file DOWNLOAD HASH mismatch

    for file: [F:/build-opencv3.2.0/opencv-3.2.0/3rdparty/ffmpeg/downloads/a423363a6eb76d362ca6c406c96c8db6/opencv_ffmpeg_64.dll]
      expected hash: [a423363a6eb76d362ca6c406c96c8db6]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [6;"Couldn't resolve host name"]

Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:15 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:219 (include)
  CMakeLists.txt:557 (include)


CMake Error at cmake/OpenCVUtils.cmake:1047 (message):
  Failed to download opencv_ffmpeg_64.dll.  Status=6;"Couldn't resolve host
  name"
Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:15 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:219 (include)
  CMakeLists.txt:557 (include)

可见,缺少hash值为a423363a6eb76d362ca6c406c96c8db6的文件opencv_ffmpeg_64.dll,又去找…
找到了,放置于路径F:/build-opencv3.2.0/opencv-3.2.0/3rdparty/ffmpeg/downloads/a423363a6eb76d362ca6c406c96c8db6/下,
在这里插入图片描述
继续配置…

Downloading ffmpeg_version.cmake...
CMake Error at cmake/OpenCVUtils.cmake:1043 (file):
  file DOWNLOAD HASH mismatch

    for file: [F:/build-opencv3.2.0/opencv-3.2.0/3rdparty/ffmpeg/downloads/5346ae1854fc7aa569a722e85af480ec/ffmpeg_version.cmake]
      expected hash: [5346ae1854fc7aa569a722e85af480ec]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [6;"Couldn't resolve host name"]

Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:219 (include)
  CMakeLists.txt:557 (include)


CMake Error at cmake/OpenCVUtils.cmake:1047 (message):
  Failed to download ffmpeg_version.cmake.  Status=6;"Couldn't resolve host
  name"
Call Stack (most recent call first):
  3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
  cmake/OpenCVFindLibsVideo.cmake:219 (include)
  CMakeLists.txt:557 (include)

可见是缺少hash值为5346ae1854fc7aa569a722e85af480ec的文件ffmpeg_version.cmake,又去找…
找到了,放到路径F:/build-opencv3.2.0/opencv-3.2.0/3rdparty/ffmpeg/downloads/5346ae1854fc7aa569a722e85af480ec/下,
在这里插入图片描述
继续configure…
又报错…

ICV: Downloading ippicv_windows_20151201.zip...
CMake Error at 3rdparty/ippicv/downloader.cmake:73 (file):
  file DOWNLOAD HASH mismatch

    for file: [F:/build-opencv3.2.0/opencv-3.2.0/3rdparty/ippicv/downloads/windows-04e81ce5d0e329c3fbc606ae32cad44d/ippicv_windows_20151201.zip]
      expected hash: [04e81ce5d0e329c3fbc606ae32cad44d]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [6;"Couldn't resolve host name"]

Call Stack (most recent call first):
  3rdparty/ippicv/downloader.cmake:110 (_icv_downloader)
  cmake/OpenCVFindIPP.cmake:243 (include)
  cmake/OpenCVFindLibsPerf.cmake:37 (include)
  CMakeLists.txt:558 (include)


CMake Error at 3rdparty/ippicv/downloader.cmake:77 (message):
  ICV: Failed to download ICV package: ippicv_windows_20151201.zip.
  Status=6;"Couldn't resolve host name"
Call Stack (most recent call first):
  3rdparty/ippicv/downloader.cmake:110 (_icv_downloader)
  cmake/OpenCVFindIPP.cmake:243 (include)
  cmake/OpenCVFindLibsPerf.cmake:37 (include)
  CMakeLists.txt:558 (include)

可见缺少hash值为04e81ce5d0e329c3fbc606ae32cad44d的文件ippicv_windows_20151201.zip,
又去找…
找到了…放在路径F:/build-opencv3.2.0/opencv-3.2.0/3rdparty/ippicv/downloads/windows-04e81ce5d0e329c3fbc606ae32cad44d/下,
在这里插入图片描述
继续configure…

这下没问题了…
在这里插入图片描述
接下来把扩展库路径加入…
F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules
在这里插入图片描述
然后Generate…
在这里插入图片描述
在这里插入图片描述
Generate过程中报错…
在这里插入图片描述
错误日志如下:

CMake Error at cmake/OpenCVUtils.cmake:1043 (file):
  file DOWNLOAD HASH mismatch

    for file: [F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/.download/e8d0dcd54d1bcfdc29203d011a797179/vgg_generated_48.i]
      expected hash: [e8d0dcd54d1bcfdc29203d011a797179]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [6;"Couldn't resolve host name"]

Call Stack (most recent call first):
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake:13 (ocv_download)
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake:20 (vgg_download)
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/CMakeLists.txt:4 (include)


CMake Error at cmake/OpenCVUtils.cmake:1047 (message):
  Failed to download vgg_generated_48.i.  Status=6;"Couldn't resolve host
  name"
Call Stack (most recent call first):
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake:13 (ocv_download)
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake:20 (vgg_download)
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/CMakeLists.txt:4 (include)

可见是缺少hash值为e8d0dcd54d1bcfdc29203d011a797179的文件vgg_generated_48.i
又去找文件vgg_generated_48.i
找到了…放入路径F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/.download/e8d0dcd54d1bcfdc29203d011a797179/

继续Generate…
继续报错…

Make Error at cmake/OpenCVUtils.cmake:1043 (file):
  file DOWNLOAD HASH mismatch

    for file: [F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/.download/7126a5d9a8884ebca5aea5d63d677225/vgg_generated_64.i]
      expected hash: [7126a5d9a8884ebca5aea5d63d677225]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [6;"Couldn't resolve host name"]

Call Stack (most recent call first):
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake:13 (ocv_download)
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake:21 (vgg_download)
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/CMakeLists.txt:4 (include)


CMake Error at cmake/OpenCVUtils.cmake:1047 (message):
  Failed to download vgg_generated_64.i.  Status=6;"Couldn't resolve host
  name"
Call Stack (most recent call first):
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake:13 (ocv_download)
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/download_vgg.cmake:21 (vgg_download)
  F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/CMakeLists.txt:4 (include)

又去找hash值为7126a5d9a8884ebca5aea5d63d677225的文件vgg_generated_64.i,
找到了,放于F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/.download/7126a5d9a8884ebca5aea5d63d677225/下
在这里插入图片描述
继续Generate…

但是我找到的Hash值不对…

Downloading vgg_generated_64.i...
CMake Error at cmake/OpenCVUtils.cmake:1043 (file):
  file DOWNLOAD HASH mismatch

    for file: [F:/build-opencv3.2.0/opencv_contrib-3.2.0/modules/xfeatures2d/cmake/.download/7126a5d9a8884ebca5aea5d63d677225/vgg_generated_64.i]
      expected hash: [7126a5d9a8884ebca5aea5d63d677225]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [6;"Couldn't resolve host name"]

服了…就弄到这里吧,反正OpenCV3.0.0已经成功了,也知道方法了。
对了,刚才我找到的几个文件的打包下载链接如下(除了最后一个 vgg_generated_64.i):
链接:https://pan.baidu.com/s/1jdCuhLzxS49TaZZIMEnjhg?pwd=lu75

从最近探索利用Cmake编译OpenCV过程来看,不同的版本,不同的环境,不同的人遇到的问题都是不尽相同的…原因是方方面面的,千奇百怪的…所以每次编译遇到的问题都需要具体问题具体分件,没有一个标准的教程可言。
写了个心得体会,链接:https://blog.youkuaiyun.com/wenhao_ir/article/details/125102981

<think>嗯,用户想解决配置OpenCV时出现的CMake错误,特别是opencv-3.2.0中的配置错误,涉及到CMakeOutput.log和CMakeError.log。首先,我需要回忆一下常见的OpenCV配置问题以及如何解决CMake错误。 首先,用户提到了引用[3]中的错误,下载opencv_ffmpeg.dll时超时,状态28。这可能是因为网络问题导致下载失败。解决方法可能是手动下载所需的文件,或者检查代理设置,或者重试。另外,引用[5]提到了find_package找不到OpenCV的配置,可能需要设置OpenCV_DIR变量指向正确的路径。 接下来,用户的问题可能包括多个方面:依赖项缺失、网络问题导致文件下载失败、CUDA配置错误、路径设置不正确等。根据引用[1],用户修改了OpenCVDetectCUDA.cmake文件,可能是在处理CUDA相关的配置问题。另外,引用[2]和[3]显示编译过程中出现错误,需要查看日志文件CMakeOutput.log和CMakeError.log,这些日志通常包含详细的错误信息,可以帮助定位问题。 可能的解决步骤应该包括:安装必要依赖项,检查网络连接,手动下载缺失文件,正确设置CMake变量如OpenCV_DIR,处理CUDA配置,以及正确配置FFmpeg等第三方库。此外,用户可能需要清理构建目录并重新运行CMake,以确保之前的配置错误不会影响新的尝试。 还要注意不同操作系统和版本的差异,用户可能是在Ubuntu上进行配置,根据引用[4],可能涉及到Android的构建,但用户的问题可能集中在通用配置错误上。因此,解决方案需要涵盖常见的Linux环境问题,比如安装依赖库,设置环境变量等。 另外,用户提供的引用[5]提到在CMakeLists.txt中添加set(OpenCV_DIR XXXX),这确实是一个解决find_package问题的方法,需要确保路径正确指向包含OpenCVConfig.cmake的目录。 总结解决步骤应该是分步骤的,首先处理依赖项,然后处理下载问题,检查配置参数,查看日志文件,最后重新构建。同时,生成的相关问题需要围绕常见的OpenCV配置错误展开,例如CUDA支持、第三方库下载失败、路径配置等。</think>以下为配置OpenCV时解决CMake错误的步骤及分析: ### 一、基础环境检查 1. **安装必要依赖项** 确保已安装编译器、CMake、Python开发库等基础工具: ```bash sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev ``` 2. **清理旧构建** 删除之前生成的构建目录,避免残留配置干扰: ```bash rm -rf build && mkdir build && cd build ``` --- ### 二、解决典型CMake错误 #### 错误1:第三方库下载失败(如FFmpeg) 当出现类似`Failed to download opencv_ffmpeg.dll`的报错时[^3]: - **手动下载缺失文件** 根据日志提示的URL手动下载文件,放置到`/build/3rdparty/ffmpeg/`目录下 - **关闭第三方库下载** 在CMake配置时添加: ```bash -D WITH_FFMPEG=OFF # 若无需视频编解码功能 ``` #### 错误2:CUDA配置问题 若涉及CUDA编译错误[^1]: - 检查CUDA驱动版本与OpenCV兼容性 - 修改`OpenCVDetectCUDA.cmake`中CUDA架构参数(如将`-gencode arch=compute_30,code=sm_30`调整为支持的架构) #### 错误3:路径配置错误 出现`Could not find OpenCVConfig.cmake`时[^5]: - 显式指定OpenCV安装路径: ```bash cmake -D OpenCV_DIR=/path/to/opencv/build .. ``` --- ### 三、日志分析 1. **查看CMake日志** - `CMakeOutput.log`:记录编译环境检测结果 - `CMakeError.log`:记录失败的具体测试案例 示例分析: ```log CheckSymbolExists.c:(.text+0x16): undefined reference to `pthread_create&#39; ``` 表示缺少pthread库,需添加`-lpthread`链接参数 2. **重新运行CMake** 根据日志提示调整参数后重新生成: ```bash cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D WITH_CUDA=OFF .. # 示例:关闭CUDA支持 ``` --- ### 四、完整编译流程示例 ```bash # 1. 下载源码 git clone -b 3.2.0 https://github.com/opencv/opencv.git # 2. 配置构建 cd opencv && mkdir build && cd build cmake -D WITH_GTK=ON -D BUILD_EXAMPLES=ON .. # 3. 编译安装 make -j$(nproc) sudo make install ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昊虹AI笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值