这是我毕业后做的第一个项目。项目过程中,要求把之前在Windows上编译的Qt程序移植到Rockchip RK3399 Pro开发板上。参考了网上的诸多资料后,现在已经可以在开发板上跑通Qt程序 (๑ `▽´๑)

准备工作:将Qt从Windows移植到Linux

由于我的Qt程序之前是在Windows上编写的,因此第一步需要将它拷贝到Linux系统下。需要注意要把文件里的图片也拷贝过去。
Linux版本:Ubuntu 16.04
Qt版本:5.9.4

一、交叉编译器的准备

下载交叉编译工具

注意! 这里的交叉编译器必须是你的目标开发板配套的交叉编译工具。在下载之前,要先查清你Linux的glibc版本。glibc是gnu发布的libc库,也即c运行库。glibc是linux 系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc。

ldd --version

显示的结果是

ldd (Ubuntu GLIBC 2.23-0ubuntu11.2) 2.23
Copyright (C) 2016 自由软件基金会。
这是一个自由软件;请见源代码的授权条款。本软件不含任何没有担保;甚至不保证适销性
或者适合某些特殊目的。
由 Roland McGrath 和 Ulrich Drepper 编写。

可见本机的glibc版本是2.23,属于比较旧的版本。

然后下载交叉编译工具,下载地址。 此处给出的是最新版本的交叉编译器,但它与本机glibc版本并不兼容。查询到本机适用版本为gcc-linaro-6.3.1。可以尝试通过在浏览器修改网页链接找到下载地址 ʕ•ﻌ•ʔ ​​​

安装交叉编译工具

将下载的交叉编译工具gcc-linaro-6.3.1-2018.12-x86_64_aarch64-linux-gnu.tar.xz 复制到你想安装的目录下,此处选择/opt。

//在下载目录下打开终端
sudo mv gcc-linaro-6.3.1-2018.12-x86_64_aarch64-linux-gnu.tar.xz /opt

复制完成后在/opt目录下输入命令。

tar -xvf gcc-linaro-6.3.1-2018.12-x86_64_aarch64-linux-gnu.tar.xz /opt/gcc-aarch64-linux-gnu

将文件解压并重命名为gcc-aarch64-linux-gnu,然后将/opt/gcc-aarch64-linux-gnu/bin目录添加到环境变量中,输入命令。

sudo gedit /etc/profile

在末尾添加如下内容。

export PATH="/opt/gcc-aarch64-linux-gnu/bin:$PATH" 

点击保存后输入如下命令使环境变量生效。

source /etc/profile

接着通过下面的命令来验证是否安装成功。

aarch64-linux-gnu-gcc -v

若输出如下结果,证明交叉编译器安装成功。

Using built-in specs.
COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-aarch64-linux-gnu/bin/../libexec/gcc/aarch64-linux-gnu/6.3.1/lto-wrapper
Target: aarch64-linux-gnu
Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/snapshots/gcc.git~linaro-6.3-2017.05/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --enable-fix-cortex-a53-835769 --enable-fix-cortex-a53-843419 --with-arch=armv8-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/sysroots/aarch64-linux-gnu --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu/aarch64-linux-gnu/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=aarch64-linux-gnu --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/aarch64-linux-gnu/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 6.3.1 20170404 (Linaro GCC 6.3-2017.05) 

二、交叉编译Qt库

首先在官网下载qt-everywhere-opensource-src-5.9.4.tar.xz,下载地址
将下载的压缩包复制到/opt目录下,解压

tar -xvf qt-everywhere-opensource-src-5.9.4.tar.xz

然后编辑linux-aarch64-gnu-g++的qmake.conf文件。aarch64-gnu-g++是RK3399 Pro使用的编译器。

sudo gedit /opt/qt-everywhere-opensource-src-5.9.4/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf

在打开的文件中添加如下内容

QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts

如图所示
图片来自网络
点击保存,然后在/opt/qt-everywhere-opensource-src-5.9.4下输入

sudo gedit auto.sh

新建的auto.sh为交叉编译自动配置脚本,在其中添加以下内容

#!/bin/sh
./configure \
-prefix /opt/qt5.9.4-arm \
-confirm-license \
-opensource \
-release \
-make libs \
-xplatform linux-aarch64-gnu-g++ \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-dbus \
-no-separate-debug-info \

其中/opt/qt5.9.4-arm 为编译后的安装目录,-xplatform linux-aarch64-gnu-g++为交叉编译相关选择。
接着修改该文件权限并执行。

sudo chmod u+x auto.sh 
./auto.sh

结束后会显示如下结果并生成Makefile文件。

图片来自网络
接着输入

//-j是指在编译时用多少个线程进行编程,数字越大速度越快,最大值取决于你电脑的性能
sudo make -j64

这里需要执行比较长的一段时间。

然后输入。

sudo make install

执行成功后,可以看见/opt目录下出现了我们指定的安装目录/opt/qt5.9.4-arm,表示安装成功。

三、在QtCreator上交叉编译

安装QtCreator

在官网下载qt-opensource-linux-x64-5.9.4.run,下载地址. 查看更多版本可查看:下载地址.
把下载下来的文件放到/opt下.

//在下载目录下打开终端
sudo mv qt-opensource-linux-x64-5.9.4.run /opt

输入命令.

1. sudo chmod u+x qt-opensource-linux-x64-5.9.4.run
2. ./qt-opensource-linux-x64-5.9.4.run

按照提示点击下一步,直到此处,按照图示选择.

图片来自网络
安装完成后,在命令行输入.

cd /opt/Qt5.9.4/Tools/QtCreator/bin
./qtercator

结果如下:

图片来自网络
*可根据需要锁定至启动器。
在工具-选项中添加交叉编译器。在如下位置手动添加路径,选择前面下载的交叉编译器位置,GCC和G++都要添加。

图片来自网络
然后在Qt versions栏选择Qt版本,路径为交叉编译后安装的qt路径,如下图所示。

图片来自网络
这里可以指定多个Qt版本,如果需要在PC上调试代码,可以安装一个Linux的Qt环境并在这里添加。

最后在构建套件栏目添加套件,如下图所示,包括名称、设备类型、编译工具、Qt版本等信息,如下图所示。

图片来自网络
如果添加了多个环境,在项目栏点击灰色的环境直接添加,以后编译时就可以很方便地切换环境。

四、在ARM开发板上跑通第一个Qt程序

开发板Qt配置

首先要将交叉编译的Qt库复制到开发板,这里通过ssh发送。在开发板上输入

scp 发送者id@发送者ip:发送文件路径 接收文件路径
//例如:scp u123456@172.172.172.172:~/example ./

发送前可能要关闭PC端的防火墙。

systemctl stop ufw

发送后,需要将安装目录下的include、 lib、 plugins添加到开发板的环境变量中。
输入

sudo gedit /etc/profile

在文件末尾添加你的Qt路径,请根据实际情况修改。

export QTEDIR=/opt/qt5.9.4-arm/
export LD_LIBRARY_PATH=$QTEDIR/lib:$LD_LIBARAY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTEDIR/plugins
export QT_QPA_PLATFORM=linuxfb
export QT_QPA_FONTDIR=/usr/share/fonts/truetype/droid

然后保存,输入如下命令让环境变量生效。

source /etc/profile

最好重启一下。

执行Qt程序

在QtCreator交叉编译你的Qt程序,注意,编译后的程序是无法在PC上运行的!编译成功后默认会在统计目录生成一个Debug文件,如"build-XXX-ARM-Debug",里面有一个可执行文件,将它发送到开发板上。

然后在开发板上输入

sudo 你的可执行文件

成功执行,大功告成 (๑•̀ㅂ•́)و✧

参考资料

  1. RK3399 ARM QT开发环境搭建
  2. Ununtu 16.04交叉编译移植qt5.9.4
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐