在Rockchip RK3399 Pro开发板上跑通第一个Qt程序

  • 准备工作:将Qt从Windows移植到Linux
  • 一、交叉编译器的准备
    • 下载交叉编译工具
    • 安装交叉编译工具
  • 二、交叉编译Qt库
  • 三、在QtCreator上交叉编译
    • 安装QtCreator
  • 四、在ARM开发板上跑通第一个Qt程序
    • 开发板Qt配置
    • 执行Qt程序
  • 参考资料

这是我毕业后做的第一个项目。项目过程中,要求把之前在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

在Rockchip RK3399 Pro开发板上跑通第一个Qt程序相关推荐

  1. TI CC3200 WIFI实训开发套件(OURS-SDK-WFB)IAR for ARM7.8调试2————对IAR for ARM的熟悉,并在开发板上跑起来第一个程序

    首先安装IAR for ARM7.8,自己搜索安装, 使用电脑Win10 x64 下载资料:https://e2echina.ti.com/group/universityprogram/studen ...

  2. rknn模型在rv1126开发板上跑

    在前面,已经将 onnx模型转为 rknn模型. yolov5 onnx模型 转为 rknn模型_爱钓鱼的歪猴的博客-CSDN博客 这里探讨的是:rknn模型在rv1126开发板上运行 目录 1.rk ...

  3. linux 嵌入上电自动运行,如何在linux嵌入式开发板上开机自动运行用户应用程序...

    开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中.有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的S ...

  4. 在VIM3开发板上运行无修改的iOS内核镜像

    在VIM3开发板上运行无修改的iOS内核镜像 之前在网上有看到过人使用QEMU成功的把IOS内核运行起来且成功挂载根文件系统的相关文章.理论上能在QEMU上跑成功,在真实的ARMv8开发板上运行起来也 ...

  5. 野火i.MX6ULL Pro开发板构建根文件系统

    眼瞅着2020年马上就要到头了,承诺给大家的Linux移植三部曲还差最后一篇,这个拖延癌晚期恐怕今年是治不好了,不到最后的DL绝不妥协-- (这句话是年前写的,写了个开头就疫情了,封城,电脑丢在了公司 ...

  6. 开源RISC-V 项目Freedom在Arty-7-100T开发板上的实现

    开源RISC-V 项目Freedom在Arty-7-100T开发板上的实现 1.获取Freedom项目源码 Freedom项目开源的地址为https://github.com/sifive/freed ...

  7. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  8. win7下将rtt1.2.0移植到4088开发板上

    1.准备工作: 下载rtt1.2.0源码: 安装python2.7: 安装scons: 安装编译器mdk 4.72; 安装串口工具putty; 2.编译源码包: 打开命令窗口cmd,进入rtt1.2. ...

  9. 瑞芯微RK3399芯片开发板香橙派4的HDMI音频播放功能测试(Linux系统)

    瑞芯微RK3399芯片开发板香橙派OrangePi 4(16G)用拥有4G内存16G存储,集成双频WiFi.蓝牙5.0.HDMI输出.千兆网口.USB接口等丰富的功能接口,支持双摄像头输入和两路视频输 ...

最新文章

  1. itest系统学生登录不了_四川省中小学生艺术测评管理系统登录平台https://www.soyohui.com/app/165187/...
  2. mysql oracle 默认事务级别_oracle 默认的事务隔离级别
  3. 依赖注入容器Unity Application Block快速入门
  4. python序列数据类型_Python 数据类型 之 序列类型
  5. rocket-console控制台安装
  6. 电与磁 —— 电磁铁
  7. (转)“跑批”发展编年史
  8. 天秀!花费 200W 设计的新版 “小米”图标,看看用Python怎么绘制?
  9. Linux 网卡重新获取IP
  10. Linux获取外网IP
  11. mind map 思维导图
  12. 武汉服务器眼中的黄鹤楼
  13. ios 扇形 按钮_iOS开发教程之扇形动画的实现
  14. 27家中美名校借阅榜对比公开:差别太大了
  15. 这 7 个牛逼项目,不来看看~~
  16. 探寻维纳控制论密码,解读“人工智能”各大学派
  17. 【VRRP】来给你的网关加一个备份吧
  18. BZOJ1616[Usaco2008 Mar]Cow Travelling游荡的奶牛 dp
  19. Future异步回调详解
  20. 李宏毅HW01——新冠疫情数据的预测

热门文章

  1. 5.6.2. Removing a Column
  2. 特瑞仕|关于无线射频
  3. 35岁了,程序员真的找不到工作了
  4. 学生管理小系统2.0(C语言)
  5. 谷粒商城学习时遇到的一些问题
  6. RBA 7.0 责任商业联盟行为准则改版重点解析
  7. 关于洛古p1019单次接龙的一点看法
  8. 10分钟离线安装k8s/kubernetes就是这么快
  9. 微信小程序 RTMP 音视频 通话 ffmpeg_音视频面试基础题
  10. Yii2 用Html助手类和普通方法写一个删除按钮