使用CMAKE安装opencv 3.4.1和Qt 5.10

时间:2018-03-23 23:02:33

标签: qt opencv cmake opencv3.0 qt5.10

我安装 Qt 5.10 最新版本和 opencv3.4.1 ,我无法在此版本的Qt中安装库 Cmake 有人可以帮我在我的Windows 10 64位上做吗? 我也尝试过这个视频 https://www.youtube.com/watch?v=ZOSu-2Oju-A 并在cmd步骤中我有这个(图片在这个链接) that what I have when I write mingw32-make

在这个链接中也是((https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows))我仔细地做了所有步骤,但是在执行这些步骤之后我没有在opencv-build中找到文件夹bin而我的操作系统是Windows 10 64位谢谢寻求帮助。

1 个答案:

答案 0 :(得分:1)

注意:我的回答更多基于[SO]: openCV mingw-32 error in cmd(发布的 .pdf 中提到的工具版本)

1。初步考虑

在一开始,我尝试使用计算机上已有的产品( Win 10 )进行构建:

  • CMake 3.6.4 (由 Android Studio 捆绑-我已经几个月没有更新了 BTW ), cmdline -因为没有 GUI
  • MinGW7.2.0 (我在机器上构建的用于其他任务)
    • g ++ 7.2.0
  • OpenCV 3.4.2 (已下载[GitHub]: opencv/opencv - opencv-3.4.2.zip,专门用于此任务)


构建过程已经过了这一阶段(嗯,它在此点以下失败了,我没有查清楚原因)。 无论如何,我认为我使用的构建环境和建议的构建环境距离太远,所以我:

  • 下载的 CMake 3.6.3 Win x64 软件包(包含 cmake-gui -作为 cmdline 可以痛苦,尤其是对于那些不习惯的人)
  • 使用了 MinGW 5.3.0 (我的 Qt 安装的一部分)
    • g ++ 5.3.0

问题的核心(如注释中所述,或者由 Google 指定错误)是 g ++ 编译器未使用 C ++ 11 标准( protobuf 源代码需要它)。
所以,我做了一个小测试:将错误代码粘贴到文件中(并添加一个虚拟 main ),并在2个 MinGW 安装中进行尝试。

code.cpp

template <typename char_type>
bool null_or_empty(const char_type* s) {
    return s == nullptr || *s == 0;
}

int main() {
    return 0;
}

输出

e:\Work\Dev\StackOverflow\q051629751>dir /b
build
build.bat
cmake-gui.exe - Shortcut.lnk
code.cpp
src

e:\Work\Dev\StackOverflow\q051629751>set _PATH=%PATH%

e:\Work\Dev\StackOverflow\q051629751>set PATH=%_PATH%;c:\Install\x64\MinGW32\MinGW32\7.2.0-posix-seh-rt_v5-rev1\mingw64\bin

e:\Work\Dev\StackOverflow\q051629751>"c:\Install\x64\MinGW32\MinGW32\7.2.0-posix-seh-rt_v5-rev1\mingw64\bin\g++" code.cpp

e:\Work\Dev\StackOverflow\q051629751>"c:\Install\x64\MinGW32\MinGW32\7.2.0-posix-seh-rt_v5-rev1\mingw64\bin\g++" --version
g++ (x86_64-posix-seh-rev1, Built by MinGW-W64 project) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


e:\Work\Dev\StackOverflow\q051629751>dir /b
a.exe
build
build.bat
cmake-gui.exe - Shortcut.lnk
code.cpp
src

e:\Work\Dev\StackOverflow\q051629751>del /q a.exe

e:\Work\Dev\StackOverflow\q051629751>set PATH=%_PATH%;c:\Install\Qt\Qt\Tools\mingw530_32\bin

e:\Work\Dev\StackOverflow\q051629751>"c:\Install\Qt\Qt\Tools\mingw530_32\bin\g++" code.cpp
code.cpp: In function 'bool null_or_empty(const char_type*)':
code.cpp:3:17: error: 'nullptr' was not declared in this scope
     return s == nullptr || *s == 0;
                 ^

e:\Work\Dev\StackOverflow\q051629751>"c:\Install\Qt\Qt\Tools\mingw530_32\bin\g++" --version
g++ (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


e:\Work\Dev\StackOverflow\q051629751>"c:\Install\Qt\Qt\Tools\mingw530_32\bin\g++" code.cpp -std=c++0x

e:\Work\Dev\StackOverflow\q051629751>

如所见,较早的 g ++ 需要-std=c++0x 明确

按照构建步骤操作,我得到了与下图相同的错误(我直接在 protobuf 的目录中启动了 mingw32-make 之前建立的东西):

protobuf build failed

2。解决方案

两者都在 cmake-gui 级别完成。设置路径后:

  • 点击“ 配置
  • 进行所需的变量更改
  • 点击“ 生成
  • 从控制台
  • 在构建目录中启动 mingw32-make

注释

  • 由于我距离成为 CMake 专家还很遥远,因此在执行此操作之前,我先清空构建目录,以确保以前的构建没有剩余(当然,缺点是是所有操作都需要再次完成,通常需要很长时间)

  • 由于我没有启用并行构建,所以我没有等待完整的构建完成(因为这需要很长时间),而只是检查它是否通过了这一点

2.1强制 C ++ 11 标准

点击“ 添加条目”并设置[CMake 3.1]: CXX_STANDARD

C++11

在下面,请注意,构建通过之前失败的地方:

protobuf build succeeded

2.2跳过 protobuf 构建

注释

  • 在已发布的电影中,没有尝试构建 protobuf (可能不在捆绑包中?),这就是为什么没有弹出该错误的原因
  • 我不知道最终版本中将不提供哪些功能,因为我不知道
  • 使用了什么 protobuf
  • 我认为这更像是一种解决方法

搜索与 protobuf 相关的变量,并取消选中任何在 BUILD WITH 组中的变量( 蓝色行):

Skip protobuf

同样的效果在下面- protobuf 构建不再发生(它紧随 libIlmImf 之后):

protobuf build skipped