1

我安装了Qt 5.10最新版本和opencv3.4.1,但我无法使用Cmake在这个版本的 Qt 中安装库,有人可以帮我在我的 windows 10 64 位上安装吗?我也试过这个视频 https://www.youtube.com/watch?v=ZOSu-2Oju-A 并且在 cmd 步骤中我有这个(图片在这个链接中) 那就是我写 mingw32-make 时所拥有的

在此链接中((https://wiki.qt.io/How_to_setup_Qt_and_openCV_on_Windows))我仔细执行所有步骤,但在执行这些步骤后我没有在 opencv-build 中找到文件夹 bin 并且我的操作系统是 windows 10 64 位感谢帮助。

4

1 回答 1

1

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

一、初步考虑

一开始,我尝试使用我机器上已有的东西(Win 10)来构建它:

  • CMake 3.6.4 (由Android Studio捆绑-顺便说一句我几个月没有更新),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安装中进行了尝试。

代码00.cpp

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


int main() {
    return 0;
}

输出

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q049459395]> sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***

[prompt]> dir /b
build
build.bat
cmake-gui.exe - Shortcut.lnk
code.cpp
src

[prompt]> set _PATH=%PATH%

[prompt]> set PATH=%_PATH%;c:\Install\x64\MinGW32\MinGW32\7.2.0-posix-seh-rt_v5-rev1\mingw64\bin

[prompt]> "c:\Install\x64\MinGW32\MinGW32\7.2.0-posix-seh-rt_v5-rev1\mingw64\bin\g++" code.cpp

[prompt]> "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.


[prompt]> dir /b
a.exe
build
build.bat
cmake-gui.exe - Shortcut.lnk
code.cpp
src

[prompt]> del /q a.exe

[prompt]> set PATH=%_PATH%;c:\Install\Qt\Qt\Tools\mingw530_32\bin

[prompt]> "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);
                  ^

[prompt]> "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.


[prompt]> "c:\Install\Qt\Qt\Tools\mingw530_32\bin\g++" code.cpp -std=c++0x

[prompt]> 

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

按照构建步骤,我得到了与下图相同的错误(我直接在protobuf的目录中启动了mingw32-make,以跳过之前构建的所有其他内容):

protobuf 构建失败

2. 解决方案

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

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

备注

  • 由于我离成为CMake专家还很远,在这样做之前,我清空了构建目录以确保之前的构建没有任何内容(当然缺点是一切都重新完成,这通常需要很长时间)

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

2.1 强制C++11标准

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

C++11

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

protobuf 构建成功

2.2 跳过Protobuf构建

备注

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

搜索Protobuf相关变量,并取消选中BUILDWITH组中的任何变量(线):

跳过 protobuf

效果再次如下 - Protobuf构建不再发生(它就在libIlmImf之后):

protobuf 构建已跳过

于 2018-08-09T12:25:48.947 回答