本文在虚拟机条件下安装成功,采用Ubuntu18.04 64位镜像作为编译环境。
- 需要准备材料
- 交叉编译器:目标机器为64位的使用
gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu(64位交叉编译器).tar.xz
目标机为32位的使用:
gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
② qt5源码和qtcreator运行包(本例基于64位机器)
qt-everywhere-src-5.12.11(QT源码).tar.xz
qt-opensource-linux-x64-5.12.11(QT开发工具).run
- 安装环境(Ubuntu中安装)
第一步首先要换源:(不然慢到你怀疑人生)
sudo vi /etc/apt/sources.list
或
sudo gedit /etc/apt/sources.list
将下面的源复制进去(实测中科大的源是最快的,更多人推荐阿里源):
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
使用sudo apt-get update和 使用 sudo apt-get upgrade 进行软件下载源更新。
第二步安装环境依赖:
$ sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools
$ sudo apt-get install device-tree-compiler gcc-aarch64-linux-gnu mtools parted
$ sudo apt-get install libudev-dev libusb-1.0-0-dev python-linaro-image-tools
$ sudo apt-get install linaro-image-tools autoconf autotools-dev libsigsegv2 m4
$ sudo apt-get install intltool libdrm-dev curl sed make binutils build-essential gcc
$ sudo apt-get install g++ bash patch gzip bzip2 perl tar cpio python unzip rsync flex
$ sudo apt-get install bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev
$ sudo apt-get install libglade2-dev cvs git mercurial rsync openssh-client subversion
$ sudo apt-get install asciidoc w3m dblatex graphviz python-matplotlib libc6:i386
$ sudo apt-get install libssl-dev texinfo genext2fs
$ sudo apt-get install lib32stdc++6
$ sudo apt-get install g++-arm-linux-gnueabihf
$sudo apt-get install gcc-arm-linux-gnueabihf
$ sudo apt-get install liblz4-tool lib32gcc-7-dev g++-7 libstdc++-7-dev
如果是rk3399,还需要安装
sudo apt-get install g++-aarch64-linux-gnu
sudo apt-get install gcc-aarch64-linux-gnu
- 搭建交叉编译环境
交叉编译环境的设置基本就是减压到指定路径,然后将路径添加到环境变量即可。
进入到/opt目标下:cd opt
新建一个目录,用来存放交叉编译器:mkdir gcc-arm-6.3.1/
进入到交叉编译器存放的地方,然后将编译器复制到gcc-arm-6.3.1/下:mv gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz /opt/gcc-arm-6.3.1/
在gcc-arm-6.3.1/下面进行解压:cd /opt/gcc-arm-6.3.1/
tar -xvf gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
等待解压完成,完成之后会有一个bin目标,需要将这个bin目标添加到环境变量中。
打开bashrc文件:sudo vi /root/.bashrc 或者 sudo gedit /root/.bashrc
添加:export PATH=/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:$PATH
Source一下使之生效:sudo source /root/.bashrc
查看是否生效:arm-linux-gnueabihf-g++ -v ,如果可以查到,就是成功了。
- 编译QT
解压源码到当前路径,我的默认是用户目录:/home/jinyh:tar -xvf qt-everywhere-src-5.12.11.tar.xz
以下两步比较关键,需要创建编译配置和qmake配置。
我的编译配置为;
./configure -prefix /usr/local/qt-arm/QtEmbedded-6.3.1-arm -confirm-license -opensource -release -make libs -xplatform linux-arm-gnueabi-g++ -pch -qt-libjpeg -qt-libpng -qt-zlib -no-opengl -no-sse2 -no-openssl -no-cups -no-glib -dbus -no-xcb -no-separate-debug-info -no-iconv
可以作为一个脚本运行,也可以作为命令直接输入运行。
-prefix /usr/local/qt-arm/QtEmbedded-6.3.1-arm 表示的意思为Qt的安装路径,需要提前mkdir出来。
上面需要注意的一点是-xplatform参数,我选择了arm-gnueabi-g++,因为在目录/home/jinyh/qt-everywhere-src-5.12.11/qtbase/mkspecs里面包含了这个平台,如果要使用自己的平台,需要在这里新建平台和配置文件(未尝试)。
修改配置文件,在/home/jinyh/qt-everywhere-src-5.12.11/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
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC =/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX =/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK =/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB=/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR =/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY =/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-objcopy
QMAKE_NM =/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-nm -P
QMAKE_STRIP =/opt/gcc-arm-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip
load(qt_config)
上面主要修改的就是使用交叉编译器来进行编译。
运行配置脚本或者直接扔进去运行,大概会出现这样的成功画面
然后就可以愉快的make -j4 && sudo make install了,等待安装完成,不出意外的话,大约耗时3h。
配置环境变量:
export QTDIR=/usr/local/qt-arm/QtEmbedded-6.3.1-arm
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
然后source一下啊,输入qmake -version,能看到版本信息,OK。
- 安装qtcreator
Ubuntu# chmod +x qt-opensource-linux-x64-5.12.2.run
Ubuntu# sudo ./qt-opensource-linux-x64-5.12.2.run
Ubuntu# Cd opt
Mkdir Qt5.12.2
建立qtcreator的安装目录。
选择安装目录后,一直下一步,出现的窗口是选择组件,可根据个人所需要的组件酌情选择,但尽量除了安卓的都选,点击下一步。
出现一个询问许可协议的窗口,选择第一项已同意并阅读条款。再点击下一步。到了已做好安装准备这一步,直接单击安装即可。
到此 Qt 已经准备好安装了。
添加环境变量,vi /root/.bashrc,
export PATH="/opt/Qt5.12.11/Tools/QtCreator/bin:$PATH"
export PATH="/opt/Qt5.12.11/5.12.11/gcc_64/bin:$PATH"
source /root/.bashrc,然后在用户名下,输入qtcreator,既可以启动qtcreator。
或者在终端输入
/opt/Qt5.12.2/5.12.2/QtCreator/bin/qtcreator &
这句可以保存下来,复制、粘贴即可。
- 配置QT编译组件kit
进入ubuntu后,输入 sudo su
输入密码,
然后,再输入qtcreator,打开工程即可。(这里可能会存在一个问题,放在最后面讲!)
找到qt的Tools,打开Options
然后,Manual, Add G++,只是将刚刚的GCC中的gcc改选为g++的那个。
下一步,Qt Versions,qmake基本上会自动添加的,如果上面的程序都没错的话。
Kit套件基本就是将刚才的编译器和version配置一下,前面的感叹号是因为没有选择device,可以不管。
就可以生成32位arm执行程序了,然后去rk3288开发板上运行。
最后一个问题:
安装Qt5.15.0后,在运行测试用例时弹出错误: qt.qpa.plugin: Could not load the Qt platform plugin “xcb” in “” even though it was found. This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb. Aborted (core dumped) 根据问题描述,虽然能够找到但是不能加载Qt平台插件“xcb”,虽然接下来又说重新安装可能能够解决,这个可能的话,还是 尽量作为最下的选择吧。
解决办法:
$ sudo apt-get install libxcb-xinerama0
详见文档:
Ubuntu18.04下解决Qt出现qt.qpa.plugin:Could not loadthe Qt platform plugin “xcb“问题_风一样的航哥的博客-CSDN博客其他主要参考: