这篇是我的第二篇博客,呵呵。上次那篇发牢骚是我第一次写博客。我选择在开源中国社区写博客,是因为这个上面平常有很多关于科技领域和程序员的资讯(新 闻),而且有很多技术资料和开源软件唾手可得,下载也方便。最重要的是我喜欢看这个上面的评论,不管是喷子还是喷喷子的喷子,都很又意思。额。。。我不是 打广告,我只是表示一下自己的真是感受,言归正传吧。
Qt4到5有很多变化的,首先元对象系统变了,Qt5的信号和槽基于模板了,而不是以前的字符串。这样的话信号和槽的性能应该会提高很多。其实以前信号和 槽的也不慢,只是很多Qt反面的人老拿这个说事。Qt5的信号连接的槽可以不用slot声明,但是在这里我有个问题,Qt的信号和槽是不能有函数参数默认 值的,有默认值我发现不管用,就是槽不响应信号,如果Qt5信号能绑定任意槽的话,不知道信号和槽参数默认值的话信号行不行。Qt5的Qtcreator 比以前的好用,调试方便。其他的方面有很多改进,Qt5.5.0增加了qt3d和qtcanvas3d模块,但是嵌入式的用不到,要用的话得有嵌入式平台 的opengl。好了,我只能说这么多了,下面来看Qt5.5.0编译移植。
我的系统是Ubuntu 14.04编译器是arm-none-linux-gnueabi-gcc 4.8.3。在这里,因为很多人(包括我们公司)都用友善之臂的FriendlyARM编译器,但是版本太旧了,arm-linux-gcc有bug,编译的时候才知道有多坑,这里我给个4.8.3的连接:http://www.veryarm.com/arm-none-linux-gnueabi-gcc进去下载最新的进行,或者网盘http://pan.baidu.com/s/1nt46q2t
编译:
第一步:下载qt-everywhere-opensource-src-5.5.0.tar.gz,这个Qt官方有。下载arm-none- linux-gnueabi-gcc。注意我给的这个连接。自己找资源下的话,不要下载gcc-arm-none-eabi,这个是给裸机嵌入式编译用 的。
第二步:解压arm-none-linux-gnueabi-gcc,解压完(文件夹名字是arm-2014.05,我改成arm),直接复制/opt/下面了:
$ sudo cp arm /opt/
第三步:配置环境变量,在Ubuntu14.04下面,切换到home目录:
$ cd ~
$ vi .bashrc
在PATH后面添加$PATH:/opt/arm/bin/,如果没有PATH,则添加一行:
export PATH=$PATH:/opt/arm/bin/
然后保存退出。让环境变量生效。如果不会就注销一下,再登录会生效。
第四步:找个英文目录,把qt-everywhere-opensource-src-5.5.0.tar.gz放进去。用终端解压:
$: tar -zxvf qt-everywhere-opensource-src-5.5.0.tar.gz
千万别右击提取到此处,这个解压好像和命令解压不同,反正右击提取的,到编译的时候你就知道有多坑了。我编译搞了两天两夜,有几次都是这个造成的。
第五步:修改编译配置文件,在目录:qt-everywhere-opensource-src-5.5.0/qtbase/mkspecs/linux-arm-gnueabi-g++/下面qmake.conf。(红色是我的改动)改为:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++
# modifications to linux.conf
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_NM = arm-none-linux-gnueabi-nm -P
QMAKE_STRIP = arm-none-linux-gnueabi-strip
load(qt_config)
第六步:在编译之前,还有个改动,额。。。qt3d和qtcanvas3d在编译的时候会报错,说是未识别模块,而且嵌入式的没有opengl,识 别了也会报错,导致编译失败,而且编译配置参数里面也没有这两个模块的配置。我的解决方法简单粗暴,在配置时参数加-no-opengl,然后打开qt- everywhere-opensource-src-5.5.0/qt.pro文件,找到:
addModule(qt3d, qtdeclarative qtimageformats)
addModule(qtcanvas3d, qtdeclarative)
这两行注释掉(#号注释),或者直接删掉。如果不注释掉,即使加了-no-opengl也会报错,编译失败。
第七步:配置编译参数,用./configre -help 可以查看参数。我的配置是:
$./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix /opt/Qt-5.5.0/armv7-a -no-c++11 -no-opengl
注意:红色部分是你的Qt库将要安装的位置,慎重,如果以后要装那,就写那。移动了位置,用的时候qmake找不到库。虽然可以配置,但是每个工程 用的时候都得配路径,很麻烦。参数中-no-c++11,表示不用C++11的特性,不加这个参数,可能编译不过,-no-opengl表示没有 opengl。我没加参数-qreal float ,因为我发现,加上之后编不过。在编译到.../qtbase/src/gui/painting/qpdf.cpp的时候会报错。
第八步:如果上面配置没有问题,接下来make:
$make
等两个小时。。。
第九步:安装:
$sudo make install
在这里加sudo是因为,安装时会将库文件复制到上面第七步配置的安装目录(红色的/opt/Qt-5.5.0/armv7-a ),opt目录是需要root权限的。
第十步:编译平台插件,由于Qt5以后,删除了嵌入式的QWS(Qt windows system-Qt窗体系统)换成QPA(Qt Platform Abstration -Qt平台抽象),平台插件在qt-everywhere-opensource-src-5.5.0/qtbase/src/plugins /platforms/下面。有各种平台的插件,基于frambuffer的插件是lunuxfb这个文件夹下,其他的还有android、ios、 winrt、windows等等,需要什么平台的编译就是了。QPA运行时要加参数,我还没试,还不知道,网上有人用了可以参考一下。
好了,这是我编译Qt5.5.0的过程。这个我把qt3d和qtcanvas3d砍掉了。有人要问了,新功能都没了,还不如用旧的。额。。。如果是Qt4 的话,还是移植新的好。因为这个变化不是一般的大,很有必要。Qt5的话,可能变化不大,但是Qt5.5.0据说修复了1500个Bug。我一直没编译 Qt5.5.0以前的版本,一直在等,等的就是5.5.0,毕竟这是个大版本。
来源:oschina
链接:https://my.oschina.net/u/1177171/blog/502319