当前位置:C++技术网 > 资讯 > [Qt] 如何在使用Qt过程中同时支持编译32位与64位版本

[Qt] 如何在使用Qt过程中同时支持编译32位与64位版本

更新时间:2017-05-26 23:38:33浏览次数:1+次

        http://www.cjjjs.com/paper/lkkj/78201534216904.html

        上面的链接是我通过C++技术网搜索到了的Qt安装方法,但是已经时隔差不多两年的时间了,难免会出现安装过程不一样的改动,如果说我安装VS2013和同样的Qt版本或许过程还会一样,但可惜的是我使用的是VS2015。


         [图 - 1]

        我通过上面的链接下载了Qt 5.8.0版本,下面我再慢慢解释我为什么下载了两个版本的Qt。


        我运行了32位版本的Qt安装程序,按照上面的链接教程开始安装,在选项方面我选择了源码和需要的支持库,但却并没有选择草莓编译器,因为我想要用VS2015来编译。



        [图 - 2]

        经过漫长的等待,终于安装完成了,还剩下了一个东西没有安装,由于教程的图片过于模糊,我就直接看Other downloads大字来在Qt官方用浏览器的关键字搜索定位下载。

        


        [图 - 3]

        下载完毕之后,我点击了运行,结果弹出了错误。我这时在怀疑我是不是下载错东西了?



        [图 - 4]

        于是我就在下载另外一个VS2015扩展工具。教程中的是200多MB,这个扩展工具才接近9MB。



        [图 - 5]

        我直接双击了一下扩展工具,VS2015就安装上去了。这时我在想,这是版本的差别吗?




        [图 - 6]

        接着我按照教程配置了Qt库的路径,用VS2015和Qt连接。


        [图 - 7]

        开始测试Qt,我新建了项目,并且开始了编译,然后运行,是成功的。


        No resources in ''''C:\Users\Administrator\Desktop\QtGuiApplication1\QtGuiApplication1\QtGuiApplication1.qrc''''.
        QtGuiApplication1 C:\Users\Administrator\Desktop\QtGuiApplication1\QtGuiApplication1\RCC

        但是编译时给我弹出了一个警告,说是在这个目录中没有资源?这又是一个新的机制?但是这个或许我要找其他教程资源来看看才能知道了。


        [图 - 8]

        于是我又有了疑问了,这个东西没有64位?不过这都不是什么问题,我在配置管理里添加一个64位不就行了吗?


        [图 - 9]

        结果就是我自作聪明了。编译时给我弹出了一个错误窗口,并且取消了生成。


        难道我就非得再安装一个64位的Qt版本才行吗???

        可是我并不想安装64位版本的Qt,因为快捷目录会互相覆盖。

        再就是,在VS2015内我怎么切换64位和32位版本啊?

        为什么就不能像VS2015里内置一个_WIN64宏来判断呢?

        难道我只能使用Qt自带的编译界面?可是我并不想使用它啊!

        还是说我的安装有错误???

        

        结果我是很无语...,没办法了。


        最后感谢C++技术网的回答。


C++技术网会员解答:

    您好,感谢你对C++技术网的信任和支持。

    大概了解了,就说说32位和64位的问题吧。至于说使用QT中的具体问题,复制问题的描述,搜索一下就可以了。

    如果要编译64位程序,肯定需要有支持64位的编译器。要编译32位程序,就需要支持32位的编译器。VS是默认的是VC编译器,VC编译器还是和Windows平台直接挂钩的。当然,VS还要其他编译器。而要想用VS编译QT代码,那肯定要安装QT插件,安装QT编译器。如果要想编译64位的QT,自然也就需要安装支持64位QT的QT插件。

    VS自带的编译器可以在VS项目设置里面设置,而外接的插件,比如QT或者VisualGDB等,都会带第三方编译器,那么此时要想设置项目的属性,需要在插件附带的项目属性中设置。设置里面,如果支持32位和64位,会提供切换选项的。至于说有没有宏,QT可能有,也可能没有,自己查一下。

    32位和64位不仅仅是设置的差别,需要一整套的支持,首先是编译器支持,然后是库支持,还有就是系统支持。没有合适的编译器,无法编译出对应的位数的程序(不同位数即代表生成的程序的指令长度的位数不同),而程序位数不同,表现在调用库函数的版本不一样,进一步深入到系统API,也就是有不同的库函数的支持。一般函数并不直接区分位数,但是系统会有不同位数的机制来保证。比如系统在运行程序前,会对程序的指令位数进行检查,如果不符合,则不能运行。如果是64位的操作系统,则可以兼容32位的程序。而32位的操作系统一个指令最大长度也就32位,而64位程序一个指令长度有64位,操作系统无法一次性执行一个指令,而当一个64位指令截断位两个32位,指令也没有意义了。指令必须是整条整条的执行的,不可拆分。

    所以,要想编写64位程序,需要一个64位的操作系统,这样生成的程序才可以直接运行。然后需要一个64位的编译器,写好的代码才可以编译成64位的程序。只要库函数,一般都没有大问题。在代码中使用指针时注意指针的长度是64位就行。