首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CMAKE安装opencv 3.4.1和QT5.10

用CMAKE安装opencv 3.4.1和QT5.10
EN

Stack Overflow用户
提问于 2018-03-23 23:02:32
回答 1查看 2.2K关注 0票数 1

我安装了Qt 5.10最新版本和opencv3.4.1,我无法在这个版本的Qt中安装Cmake,有人能帮我在windows 10 64位上完成吗?我尝试使用这个视频也是https://www.youtube.com/watch?v=ZOSu-2Oju-A,在cmd步骤中我有这个(在这个链接中的图片)

在这个链接(( 视窗 ))中,我仔细地做了所有的步骤,但是我没有在opencv-build中找到文件夹,我的操作系统是windows 10,64位,谢谢帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-08-09 12:25:48

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

1.初步考虑

一开始,我尝试用我已经拥有的机器(Win 10)来构建它:

  • CMake 3.6.4 (由Android捆绑-我几个月没有更新),cmdline -因为没有GUI
  • MinGW7.2.0 (我在机器上为不同的任务构建的)
    • g++ 7.2.0

  • OpenCV 3.4.2 (下载的[GitHub]:opencv/opencv - opencv-3.4.2.zip,专门用于此任务)

构建过程通过了这个阶段的(嗯,它在这一点下面的某个地方失败了,我没有确切地检查原因)。无论如何,我认为我使用的build env和建议的构建env太远了,所以我:

  • 下载的CMake 3.6.3 Win x64包(包含cmake as cmdline的包可能会很痛苦,特别是对于那些不习惯它的人)
  • 使用MinGW 5.3.0 ( Qt安装的一部分)
    • g++ 5.3.0

其核心问题(如注释中所指定的,或Google_ing错误)是_g++编译器不使用C++11标准(并且protobuf源代码需要它)。

因此,我做了一个小小的测试:将错误的代码粘贴到一个文件中(并添加了一个虚拟的main),并在2 MinGW安装中进行了尝试。

code00.cpp

代码语言:javascript
复制
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 *设置较短的提示,以便在粘贴到StackOverflow (或其他)页面* 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 "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++”--版本g++ (x86_64-posix-seh-rev1,1,由MinGW-W64项目建造) 7.2.0版权(C) 2017自由软件基金会公司。这是自由软件;有关复制条件,请参见源。没有任何保证,即使是适销性或适合某一特定用途。prompt> dir /b a.exe 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‘在此作用域中未声明为’nullptr‘,在此范围内未声明(s == nullptr) x (*s == 0);^ prompt> "c:\Install\Qt\Qt\Tools\mingw530_32\bin\g++“--版本g++ (i 686-posix-侏儒-rev0,由MinGW-W64项目建造) 5.3.0版权(C) 2015自由软件基金会公司。这是免费软件,请参阅复制条件的来源。没有任何保证,即使是适销性或适合某一特定用途。prompt> "c:\Install\Qt\Qt\Tools\mingw530_32\bin\g++“code.cpp -std=c++0x prompt>

正如所见,旧的g++需要显式的-std=c++0x

按照构建步骤,我得到了与下面的图像相同的错误(我在protobuf的dir中直接启动了mingw32 32-make,以跳过它之前构建的所有其他东西):

2.解决办法

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

  • 点击“配置”
  • 执行所需的变量更改
  • 点击“生成”
  • 从控制台在build中启动mingw32-make

Notes

  • 由于我离成为CMake专家还有很远的路要走,在此之前,我会清空build,以确保以前的构建没有任何剩余的东西(当然,缺点是所有的事情都会再次发生,这通常需要很长的时间)
  • 因为我没有启用并行构建,所以我没有等待完整构建完成(因为它需要花费很长时间),而只是检查它是否通过了这一点。

2.1强制C++11标准

单击“添加条目”并设置标准

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

2.2 Skip Protobuf构建

Notes

  • 在发布的电影中,没有Protobuf构建的尝试(可能它不在包中吗?)这就是为什么这个错误没有弹出
  • 我不知道最终构建中哪些功能不可用,因为我不知道Protobuf在
  • 我认为这更像是一种解决办法

搜索Protobuf相关变量,取消选中构建中或组中的 any (蓝色行):

其效果也在下面-- Protobuf构建不再发生(就在libIlmImf之后):

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49459395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档