自己动手静态编译和构建Qt5.2,包含Qt3D、Enginio和QtOpenCL

自己动手静态编译和构建Qt5.2,包含Qt3D、Enginio和QtOpenCL

       这个月初,Qt5.2正式发布,其中正式支持Android和初步支持iOS构建目标成为最大的亮点。而在它发布之前,我从它的源码镜像库gitorious中获取了最新的源码,并且甄选了两个自己需要研究的组件进行静态编译。两天的时间过去了,我克服了诸多困难,终于成功地在Ubuntu13.10和Windows8上静态编译构建Qt,以后发布Qt的演示程序不用担心客户机运行不了了。

原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/17592457


       这次我需要研究的是Qt3D、Enginio和QtOpenCL,首先介绍一下这三个模块。

Qt3D是Qt在诺基亚时期由Qt labs产生的一个新的模块,在Qt4.6的时候作为一个可选模块发布。Qt3D使用OpenGL进行渲染,它主要的特点是能够非常方便地导入各种模型,因为它在将Assimp库整合了进来,而Assimp库是目前开源界著名的三维模型倒入库;接着科学地组织场景,以场景节点为单位,逐渐地构建大型的场景;最后提供了QGLView这个类,它里面内置了摄像机和物体拣选功能,也就是说,使用QGLView可以方便地对物体进行拣选操作,Qt3D附带提供的演示程序实现了简单的拣选场景。Qt3D还没有被纳入QtSDK中,预计Qt5.3的时候我们就可以看到它的身影。

Enginio是Qt被Digia接手后逐渐发展起来的模块,在云计算和网盘存储的冲击下,Digia也希望通过Qt和自家的服务器整合提供一种“后端作为服务”的功能(Backend as a Service,BaaS)。我曾经在Enginio0.2的时候体验了一下,感觉使用起来还是挺简单的,虽然前期版本迭代频繁,目前Enginio1.0已经被整合在QtSDK中了,但易用性还是值得称赞的地方。不过以前使用的Backend ID和Backend Secret模式被取消了,取而代之的是Digia全新的Qt CloudService。这里是我以前写的有关Enginio的文章,访问Digia网站qt-project网站了解更多有关Enginio的消息。

QtOpenCL大致和Qt3D是同一时期出现的,一开始显卡GPU并行运算势头迅猛,CUDA和OpenCL崭露头角。但由于CUDA将使用范围限制在了NVIDIA自家的显卡上,作为优秀的开源跨平台框架,Qt自然不会放过整合具有跨平台优势的OpenCL。不过正如渲染器DirectX和OpenGL之争一样,NVIDIA在支持OpenCL的积极上显然比不上支持自家的CUDA,而且同OpenGL,受Khronos托管的OpenCL步伐很慢,三四年过去了,OpenCL并没有太大的变化。于是QtOpenCL也停下来了。我这一次通过自己的努力,初步尝试静态编译QtOpenCL,但只是绑定了NVIDIA的OpenCL库,能凑合用吧。不管怎么说,我还是希望QtOpenCL能够恢复开发,这样我们能够使用Qt开发支持显卡加速的并行程序了。

Qt版本更迭还是挺快的,半年就有一次更新,去年的时候刚出Qt5.0,官方支持静态编译,我赶紧试试,当时了解静态编译的知识比较少,尝试了各种方法都没有成功,于是作罢;后面Qt5.1出来了,我又开始尝试静态编译,那次成功了,还积累了部分通用开源项目的构建常识。这一次我不仅成功地进行了静态编译,而且将其中遇到的难点和解决方案记录了下来,这样下次Qt版本出来,编译就方便了。

下面是这两个版本的下载链接地址,如果你想使用静态编译的程序发布,或者想要研究Qt3D,那么这些版本一定适合你。因为这两个版本同时也是我自用的,于是我顺便将Qt3D和Enginio的文档也一并构建了,方便开发的时候查阅。

Linux64bit下载地址

Windows32bit(官方MinGW)下载地址

阅读更多

更多精彩内容