参考:
https://my.oschina.net/u/1177171/blog/502319?p={{page}}
https://blog.csdn.net/yaowangII/article/details/78529581
1、qt软件下载
首先下载QtCreator,网址http://download.qt.io/archive/qtcreator/,里面有各种版本的QtCreator下载,我选择用的是Qt5.5.0。将qt-linux-opensource-5.0.0-x86_64-offline.run放在ubutun的/opt/目录下。
2、执行安装
.进入目录/opt/,执行./qt-linux-opensource-5.0.0-x86_64-offline.run。这时候Qt的安装程序就会启动,根据提示一直按next就可以了,就像和windows上安装软件一样。在安装过程中,我的安装目录是/opt/QtCreator/。
3、安装后查看
.安装完成后,可以在/opt/QtCreator/5.5/gcc/bin/qmake 查看qmake的版本如下
QMake version 3.01、源码下载解压:
要移植Qt必须要用到Qt的源码,在这里也是用Qt5的源码来移植。源码可以在http://download.qt.io/archive/qt/下载,选择文件qt-everywhere-opensource-src-5.5.0.tar.gz下载。
把下载好的文件放在ubutun的/opt/目录下,执行命令 tar zxvf qt-everywhere-opensource-src-5.5.0.tar.gz 来解压,解压完成后就会看到 qt-everywhere-opensource-src-5.5.0 目录。
2、编译器安装
我的系统是Ubuntu 16.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
编译:
3、修改编译配置文件
在目录: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)
4、编译前改动
qt3d和qtcanvas3d在编译的时候会报错,说是未识别模块,而且嵌入式的没有opengl,识 别了也会报错,导致编译失败,而且编译配置参数里面也没有这两个模块的配置。我的解决方法简单粗暴,在配置时参数加-no-opengl,然后打开qt- everywhere-opensource-src-5.5.0/qt.pro文件,找到:
addModule(qt3d, qtdeclarative qtimageformats)
addModule(qtcanvas3d, qtdeclarative)
这两行注释掉(#号注释),或者直接删掉。如果不注释掉,即使加了-no-opengl也会报错,编译失败。
5、执行配置
$./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix /opt/Qt-5.5.0/armv7-a -no-opengl
注意:红色部分是你的Qt库将要安装的位置,慎重,如果以后要装那,就写那。移动了位置,用的时候qmake找不到库。虽然可以配置,但是每个工程 用的时候都得配路径,很麻烦。-no-opengl表示没有 opengl。我没加参数-qreal float ,因为我发现,加上之后编不过。在编译到.../qtbase/src/gui/painting/qpdf.cpp的时候会报错。
6、编译安装
$make
等大概两个小时后
$sudo make install
在这里加sudo是因为,安装时会将库文件复制到上面第七步配置的安装目录(红色的/opt/Qt-5.5.0/armv7-a ),opt目录是需要root权限的。
7、编译平台插件
由于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运行时要加参数,我还没试,还不知道,网上有人用了可以参考一下。