Qt5.5.0编译移植到Linux-Arm-A9

最后都变了- 提交于 2019-12-05 13:22:52

这篇是我的第二篇博客,呵呵。上次那篇发牢骚是我第一次写博客。我选择在开源中国社区写博客,是因为这个上面平常有很多关于科技领域和程序员的资讯(新 闻),而且有很多技术资料和开源软件唾手可得,下载也方便。最重要的是我喜欢看这个上面的评论,不管是喷子还是喷喷子的喷子,都很又意思。额。。。我不是 打广告,我只是表示一下自己的真是感受,言归正传吧。

       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,毕竟这是个大版本。



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!