由于之前使用的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组件, 就会出现以下两种情况:
- 若是lib为dll, 则报错——无法读取dll文件
- 若是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等指向的位置…
未完待续…
湃哥牛逼,可以用python做opencv啊