QT5.12.1 ARM开发环境搭建 并 移植到RK3399 ubuntu16.04系统运行【完整版】

QT5.12.1 ARM开发环境搭建 并 移植到RK3399 ubuntu16.04系统运行【完整版】

一、搭建Qt ARM开发环境

1.虚拟机64位ubuntu16.04系统下QT的交叉编译,下载安装交叉编译器:aarch64-linux-gnu-gcc

  • aarch64-linux-gnu-gcc是由 Linaro 公司基于GCC推出的的ARM交叉编译工具,可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。aarch64-linux-gnu-gcc交叉编译器必须安装在64位主机上,才能编译目标代码。不能使用传统的arm-linux-交叉编译工具链,那些编译出来的都是32bit。
  • 官网下载:https://www.linaro.org/downloads/
  • !!!重要:因官网下载非常慢还会中途显示下载错误,我采用在ubuntu直接用命令的方式安装,若继续用这个官网的安装包的话,可参考这个博文,跳过接下来的安装步骤。

更新软件源和升级更新软件,输入如下指令

sudo apt-get update
sudo apt-get upgrade

接下来下载交叉编译工具aarch64-linux-gnu-gcc

查看哪些版本可以安装

sudo apt-cache search aarch64

在这里插入图片描述

(因时间等原因,大家的版本号有点差异,接下来的编译器版本号安装,要看清自己系统下有哪个版本编译器就安装对应的即可)

安装一个没有版本号的gcc-aarch64-linux-gnusudo

apt-get install gcc-aarch64-linux-gnu

安装一个gcc开头的5版本的支持64bit ARM linux的交叉编译工具

sudo apt-get install gcc-5-aarch64-linux-gnu

安装一个没有版本号的g++编译工具

sudo apt-get install g++-aarch64-linux-gnu

安装4.9版本号的g++编译工具

sudo apt-get install g++-4.9-aarch64-linux-gnu

安装好的编译器目录在/usr/bin
在这里插入图片描述
将/usr/bin目录添加到环境变量中,执行以下命令

sudo vi /etc/profile

在末尾添加如下内容:

export PATH="/usr/bin:$PATH"

在这里插入图片描述
输入命令,让环境变量生效

source /etc/profile

验证是否安装成功,查看里边的版本信息,里边有host是什么,target是什么

aarch64-linux-gnu-gcc -v

如下显示则安装成功
在这里插入图片描述
2.下载安装交叉编译qt库:qt-everywhere-src-5.12.1.tar.xz

将下载的qt-everywhere-src-5.12.1.tar.xz压缩包复制到/usr/bin目录下,完成后输入命令

tar -xvf qt-everywhere-src-5.12.1.tar.xz

解压完成后进入获得的文件夹下

cd /usr/bin/qt-everywhere-src-5.12.1

接着输入命令

sudo vi qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf

增加以下内容(rk3399是armv8架构)

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

完整版如下:

#
# qmake configuration for building with aarch64-linux-gnu-g++
#

MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib

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

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)

# modifications to g++.conf
QMAKE_CC                = aarch64-linux-gnu-gcc
QMAKE_CXX               = aarch64-linux-gnu-g++
QMAKE_LINK              = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = aarch64-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = aarch64-linux-gnu-objcopy
QMAKE_NM                = aarch64-linux-gnu-nm -P
QMAKE_STRIP             = aarch64-linux-gnu-strip
load(qt_config)

保存后接着输入以下命令,仍在/usr/bin/qt-everywhere-src-5.12.1目录下

sudo vi auto.sh

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

#!/bin/sh
./configure \
-prefix /usr/bin/qt5.12.1-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-xcb \
-no-separate-debug-info \

修改该文件权限并执行

sudo chmod 777 auto.sh 
sudo ./auto.sh

编译成功会显示如下结果并生成Makefile文件
在这里插入图片描述
在这里插入图片描述

接着输入make进行编译,大概需要一个小时

sudo make -j4

编译完成后输入命令

sudo make install

大约一分钟后,可以看见/usr/bin目录下出现了我们指定的安装目录/usr/bin/qt5.12.1-arm,表示ARM Qt库安装成功
在这里插入图片描述

3.安装qt-opensource-linux-x64-5.12.0.run

以下为开发板安装qt需要的库:

sudo apt-get install libfontconfig1 libfontconfig1-dev

sudo apt-get install libxrender-dev libxrender1 libxkbcommon-dev libxkbcommon-x11-0 libxkbcommon-x11-dev libxkbcommon0  

sudo apt-get install build-essential

sudo apt-get install libfreetype6 libfreetype6-dev

接下来安装qt软件

建立安装目录

sudo mkdir /usr/bin/Qt5.12.1

将下载的qt-opensource-linux-x64-5.12.0.run安装在/usr/bin/Qt5.12.1目录下,加上可执行权限后执行

sudo chmod 777 qt-opensource-linux-x64-5.12.0.run
./qt-opensource-linux-x64-5.12.0.run

跳过注册,如果没有skip选项,是因为你的ubuntu联网了,关闭网络后重新运行即可
在这里插入图片描述
/usr/bin/Qt5.12.1目录下安装
在这里插入图片描述
选择组件,我只选了第一个在这里插入图片描述
其他默认安装即可。

安装完成后找到qt图标拖到ubuntu桌面
在这里插入图片描述
4.配置QtCreator
运行qt软件,点击菜单栏的工具->选项->Kits,在编译器栏中的编辑器添加我们前面安装的交叉编译工具,包括aarch64-linux-gnu-gcc与aarch64-linux-gnu-g++
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接着点击Qt versions栏添加qmake,目录为交叉编译后安装的qt库目录
在这里插入图片描述

最后在构建套件栏目添加套件,如下图所示,包括名称、设备类型、编译工具、Qt版本等信息,如下图所示
在这里插入图片描述
配置完成后套件没有红色感叹号就ok了

二、移植到RK3399 ubuntu16.04系统运行

1.将交叉编译的Qt库复制到板子上

将/usr/bin/qt5.12.1-arm交叉编译Qt库通过u盘复制到rk3399的/usr/bin目录下

接着将qt程序运行所依赖的相关文件、配置等添加到环境变量中

vi /etc/profile

末尾添加:

export QTDIR=/usr/bin/qt5.12.1-arm
export LD_LIBRARY_PATH=/usr/bin/qt5.12.1-arm/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_PLATFORM=linuxfb
export QT_QPA_FONTDIR=/usr/share/fonts/truetype/ubuntu-font-family

最后一行字体配置可在你的开发板系统上查找有什么字体,自行配置

cd /usr/share/fonts/truetype
ls

在这里插入图片描述

如果在Firefly开发板上LD_LIBRARY_PATH如此操作可能还是不生效,可以在/etc/environment 末尾添加

vi /etc/environment
LD_LIBRARY_PATH=/usr/bin/qt5.12.1-arm/lib:$LD_LIBRARY_PATH

然后source /etc/profile或者重启板子让环境变量生效

2.新建qt工程和编译

新建工程的时候注意勾选arm套件,其他和正常操作即可
在这里插入图片描述
我的测试程序04_Demo效果是,执行程序后输出open,界面开启后有个close按钮,点击按钮会关闭窗口并输出close

在这里插入图片描述
测试程序完成后,点击左下角PC图标,选择arm套件编译
在这里插入图片描述
点击左下角锤子构建生成应用(编译不运行,因为这是交叉编译器编译出的qt,不能在linux平台运行,要在arm平台运行),输出框正常,编译完成
在这里插入图片描述
生成的可执行程序在你的工程目录下
在这里插入图片描述

3.移植qt可执行程序到rk3399运行

将04_Demo可执行程序通过u盘拷贝到rk3399开发板任意目录下,我的是/Work目录

在rk3399开发板的Ubuntu界面下按Ctrl+Alt+F1切换到字符界面(终端界面),找到qt所在路径输入su命令,切换到root权限后执行./04_Demo
在这里插入图片描述
运行程序后会弹出界面并打印信息
在这里插入图片描述

在这里插入图片描述

注:如果在ubuntu界面终端命令行执行Qt程序后可打印信息,不能显示界面,则按Ctrl+Alt+F1切换到字符界面命令行执行,界面就会出来,也不知道为什么
在开发板运行qt程序,界面不出来的问题折磨了我一个多星期终于解决了!!!

主要参考资料,感谢各位大神!
Linux下的Qt环境搭建(arm交叉编译).
RK3399 ARM QT开发环境搭建
Qt程序移植到Firefly开发板(Arm linux)下运行.
Qt源码编译configure配置参数.

在开发板Android系统运行Qt界面,可参考我另一篇博文:
Qt5.12.1 for RK3399 Android8.1配置

  • 26
    点赞
  • 188
    收藏
    觉得还不错? 一键收藏
  • 36
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值