Build OpenCV with Qt & CUDA 的极限20小时
Build OpenCV with Qt & CUDA 的极限20小时

Build OpenCV with Qt & CUDA 的极限20小时

由于之前使用的OpenCV (C++) 不支持Qt和CUDA, 无奈只好重新生成新版本, 没想到, 这点问题居然花了我20h, 期间发生了各种情况, 太让人抓狂了!!!

第一次尝试: Qt Mingw & OpenCV

首先, 我想确定加入Qt选项的OpenCV是否能在Qt和VS下使用Qt项目生成。

下载Qt之后, 所有工具全部选择64位版本安装, Mingw当然也是使用版本对应的64位.

将Mingw放入Path之后, 安装cmake.

在cmake gui里, 勾选WITH_QT, 在加入QT的lib和include后, Compile通过, Generate通过. 在Terminal里输入以下内容即可开始make.

mingw32-make -j 32
mingw32-make install

就在我以为已经快结束的时候, make报错了.

经过排查, 是opencv的gapi出现了bug, 多个版本都有报告在make中出错的情况( 奇怪的是我这个版本没人提出出现bug), 故反选OPENCV_GAP重新Generate.

重新生成时虽然有几百个warning, 但还是成功了.

打开Qt自带的IDE, 在pro文件中添加lib和include files之后

调用opencv core等头文件成功, 但是一旦使用cv组件, 就会出现以下两种情况:

  1. 若是lib为dll, 则报错——无法读取dll文件
  2. 若是lib为dll.a, 则链接器报错——仍然无法运行

第二次尝试 Qt on VS & opencv

在VS上安装Qt拓展(吐槽一下,居然是在拓展里安装而不是Visual Studio Installer里…), 期间需要智慧上网, 否则… 404 NOT FOUND

完成之后配置好QT for VS Tools, 把lib和include文件夹配置好, 问题重现…

多方搜索后无解, stackoverflow上居然也没有类似问题…

只好重新编译, 这次顺便打算安装cuda选项

第三次尝试 OpenCV (MSVC) with CUDA & Qt

这次选择MSVC作为编译器编译source, 是因为之前在勾选了cuda之后显示在WINDOWS下只能使用MSVC编译器, compile后发现报错, 发现没安装cudnn

我居然没装cudnn?

薛定谔的智慧上网

Nvidia网站登录的时候, 需要经过google验证, 开启智慧上网

Nvidia网站跳转微信二维码时, 必须关闭只会上网, 又关闭智慧上网

登陆成功后, 打不开网页, 又开启智慧上网

下载的时候, 想着用IDM 32线程就几秒能下载好, 又关闭智慧上网

结果发现不开没速度, 行吧, 那我继续开着,不就1个g嘛

我就不明白了,Nvidia被墙之后能不能多弄几个cdn在中国吗(我知道这不是你的错

把cudnn的一大堆东西塞到cuda文件夹里, 重新设置path, compile成功

我看到raw.githubusercontent.com就头痛

这网站连智慧上网都没办法帮它增加一点速度,而且不可暂停+单线程下载, 1kb/s是在令人感叹.

compile里十几个第三方库使用github托管, 但开了智慧上网仍无法连接,

故只能手动一个个下载下来, 计算md5码再重命名文件, 放到.cache文件夹中重新complie, 成功

2004版Windows

没想到windows趁我不注意的时候弹窗让我安装更新, 我居然按了确定…

安装好后各种诡异问题, 绿屏重启, 声卡消失, windows hello失效…

mingw32-make == nmake?

很显然,现在用mingw是肯定不能make了,应该使用vs的nmake, 结果nmake不是命令, well, 继续找vc tools文件夹里的nmake.exe和相应的lib&include files加入path.

但这次居然仍然找不到命令…

没办法,只能把nmake放到build文件夹里.\nmake了

输出:找不到makefile

???

这时候,我发现这个build文件夹里居然有一个vs的sln项目文件!

行吧, 居然要到vs里去编译…

这让我想起了之前用scons编译tpt时的感觉…

一个小时后…

伴随着几万个warning, 我欣喜的发现qt的lib和include居然指向了mingw而不是msvc文件夹.

当我写下这段文字时,他还只完成了55%,果断取消, 改变qt lib等指向的位置…

未完待续…

一条评论

发表回复

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据