您的当前位置:首页正文

VisualStudio(VS)和QT的踩坑笔记

来源:画鸵萌宠网
VisualStudio(VS)和QT的踩坑笔记

写在前⾯:在家待就业了接近半年,终于忍不住去找了份⼯作去尝试⼀个⼈的⽣活。这第⼀份正式⼯作是做机床模拟切割的软件开发,虽然不是传统的互联⽹⼯作,但因为是C++开发,⼯作也还算对⼝吧。因为疫情原因⾃⼰的实习被鸽,所以这算是我第⼀次上班,结果刚来就被带进了⼀个⼤项⽬;要求看⼀份进万⾏的⼯程源码;boss也对我期望很⼤(各种暗⽰好好⼯作);每天的⾃⼰就像被赶着去屠宰的鸭⼦⼀样。哎!苦也没办法,青春饭就是如此。如今好不容易项⽬有了阶段性成果,不如乘此机会记录下⼀路上踩到的各种坑,不仅加深记忆,也勉励⼀下未来的⾃⼰吧!如果能顺便解决⽹友们的疑惑,那更是不胜荣幸!(上班摸鱼打出来的,⽆图见谅,哈哈哈_)

任务⽬标与现有资源

1. 现有⼀份开源的,要求将他移植到QT平台,即完成vs⼯程到qt⼯程的移植。2. 环境配置如下:

电脑配置:2核4G内存64位win7,不能上⽹不能上⽹。开发软件:vs2012/2015,QT5.14/5.12。可选编译器:MSVC2015·64位,mingw64位。

兼容问题:“constexpr:函数不会⽣成常数表达式”

问题描述:当QT调⽤visual studio⾥的msvc编译器时,⽆论什么⼯程都会报出如此错误。错误的⽂件是Qobjectdefs.h,是QT的核⼼⽂件之⼀。

解决过程:看来是⽼版本的QT还有VS存在⼀定的兼容问题。能查到的错误是错在Qalgorithm.h⾥的,还不⼀样。不过⽹上的那个有给出官⽅社区⾥修改源码的办法,我去看了⼀下,我的Qalgorithem已经和修订版⼀样了啊,于是便想能不能在那个社群⾥找到Qobjectdefs的修改版呢?然⽽并没有,哈哈。

解决⽅法:最后找boss求来了vs2015和QT5.12,⼀个更新⼀个更⽼,问题得到解决。要注意的是QT安装时,要勾选相对应VS版本的msvc编译器。

VS Kits问题:“⽆法找到Visual Studio 20__(v1_0)的⽣成⼯具”

问题描述:打开那个开源⼯程的sln⽂件后,爆出如上错误,vs⽆法继续正常⽣成和运⾏的⼯作。解决过程:这个很好理解,作者当初编写程序的时候⽤的vs⼯具集和我的不⼀样,改⼀改就是了。

解决⽅法:菜单栏项⽬—设置,或者解决⽅案资源管理器⾥右键项⽬—设置,在配置属性—常规—常规中找到平台⼯具集⼀项,会显⽰为Visual Studio 20__(v1_0)(未安装),点击它在下拉框⾥找到⾃⼰电脑⾥有的随便⼀个就⾏,再点击应⽤即可。

⼯程迁移问题:VS⼯程转换为QT Creator⼯程

问题描述:既然是要做VS⼯程转QT平台,能让宇宙第⼀IDE的VS⾃动完成的事情何必亲⾃动⼿呢?⽹上查到VS果然有QT的相关插件(能联⽹的可以直接在vs⼯具-扩展和更新⾥下)。让boss下好传给我后双击vs⾃动安装,重启vs后菜单栏⾥有了Qt VS Tools项,那么直接Create Basic.pro file⽣成Qt Creator⼯程⽂件,然后Convert custom builds steps to Qt/MsBuild不就能直接⼯作完成了——个屁。Qt VsTools⾥这些选项全他妈是⿊的!

解决过程:其实也很好理解,分布过程如下:

1. ⾸先,Qt VS Tools⾥点Qt Options,看看有没有⾃动检测到Qt版本,如果全空的话点击Add添加,Path⾥选择(QT安装路径)/(qt版本号)/(msvc20xx64或32)这个路径,VS会找到⾥⾯的Qmake程序并⾃动填写Options⾥剩下的内容。让Vs和你的Qt真正的“联系”起来。2. 其次,在新建项⽬⾥多了新建Qt项⽬的选项,随便创⼀个空项⽬,会发现这个Qt项⽬居然没有Qt Creator的配置⽂件.pro,再看看QtVS Tools,发现它那些转换选项都能⽤了。那现在真相⼤⽩了:⽹上说的那些⽤Qt VS Tools的博客不是骗⼈,⽽是因为这⽅法只能⽤来转换VS创建的QT⼯程,⽽不能直接转换普通的C++⼯程。

解决⽅法:修改⼯程的配置⽂件,让VS相信这是能转换的玩意就⾏。参考如是,⽤⽂本编辑器打开源⼯程的vcxproj⽂件,找到

PropertyGroup Label=\"Globals\"的配置群,在⾥⾯添加标签Keyword,内容是Qt4VSv1.0(记得标签闭合),保存后重新打开VS⼯程,就可以进⾏上⾯的操作啦。实际操作中KeyWord⾥时QT4还是5,VSv1.0还是2.0没多⼤关系,VS会⾃动帮你修正的(⽐如我的就变成了QTVS_v303)。

库配置问题:第三⽅库的编译和添加

问题描述:在研究的这份代码⼯程⾥,包含了⼀个⽤于⼤数据计算的第三⽅库Mpir,源⾃于Linux环境下开发的同门师兄GMP库。Mpir下载来的源码是sln⼯程,⽤VS编译后便能直接使⽤了。但是随着⼯程都移植到QT后这也出现了问题:因为VS编译采⽤的是MSVC,⽣成的静态库是.lib⽂件;QT要⽤的编译器是MINGW,采⽤的库⽂件格式是libxxx.a,⼆者不⼀样,所以需要重新编译并⼿动添加。

解决过程:Mpir的源码⼯程有点独特,它根据⽬标处理器的不同分了好⼏个⼦⼯程,⼦⼯程⽂件夹⾥只有sln和⼯程配置⽂件,所有⼯程需要的代码⽂件统⼀保存在⼀起,以⾄于更换编译器编译存在⼀定的困难。更适合的解决⽅法是改⽤linux开发的GMP库,并使⽤MINGW编译。要注意位数要和原⼯程统⼀,不然会调⽤函数失败。解决⽅法对于linux开发的第三⽅库,⼀般只需要执⾏如下命令:

./configuremake

make install

编译⽣成库⽂件后,放⼊⼯程⽬录,打开pro⽂件开始编辑:

LIBS += -L$$PWD/(库⽂件夹名) -l(库名1) -l(库名2)……INCLUDEPATH+= $$PWD/库⽂件夹DEPENDPATH += $$PWD/库⽂件夹

其中,$$PWD是pro⽂件所在⽬录,-L让QT确认库⽬录,-l确认特定的库,第⼀句确定要添加的库;第⼆第三句确认对应的.h和依赖路径,这样就⾜够了。如果⽤QT⾃带的添加库功能的话,会报出不是win32⽀持的可执⾏⽂件的错误,所以来说还是⾃⼰编写pro⽂件靠谱!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top