虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)

配置虚拟机x86_64(Ubuntu 20.04) 和 Jetson nano ARM64(Ubuntu 18.04)的Qt5.4.2交叉编译环境,具体硬件环境如下:

VMware虚拟机(X86_64)在这里插入图片描述
在这里插入图片描述
Jetson nano(aarch64)
在这里插入图片描述
流程上主要参考:
Ubuntu20.04.1(X86_64)Qt5.14.2配置ARM64交叉编译环境
JetsonNano QT5.12.9交叉编译和环境搭建

1. 交叉编译环境配置:

1.1 在虚拟机上安装Qt 5.14.2(更建议先进行1.2和1.3节,再安装Qt)

  • 直接执行 .run 程序,程序自行下载
    文件下载地址
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第1张图片
    出现界面,进行安装,位置如下,自行选择:
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第2张图片
    不确定需要什么,就安装全部组件。安装完毕后Qt就可以正常启动了。
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第3张图片
    查看一下安装路径:可以看到只有gcc_64
    在这里插入图片描述

1.2 安装ARM64编译器,建一个Jetson nano的交叉编译环境

参考:
ubuntu16.04 安装交叉编译工具aarch64-linux-gnu-gcc/g++
NVIDIA Jetson NX 交叉编译环境Ubuntu18.04

  • 首先查看Jetson nano的系统版本和编辑器版本:gcc / g++ --version 或者 gcc / g++ -v
    在这里插入图片描述
    可以看出是ubuntu 18.04 和 aarch64-linux-gnu
    经过证实, Ubuntu18.04 和 20.04 上均可以成功建立交叉编译环境
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第4张图片
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第5张图片

1.2.1 Ubuntu安装aarch64版本gcc、g++

gcc是GCC中的GUN C Compiler(C 编译器). g++是GCC中的GUN C++ Compiler(C++编译器
参考:Ubuntu交叉编译aarch64版本qt

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

安装如下:
在这里插入图片描述
安装完成后查看版本

aarch64-linux-gnu-gcc -v

虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第6张图片
也可以输入aarch64 +TAB是否出现提示,从而查看配置是否成功
虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第7张图片

1.2.2 Ubuntu中aarch64版本gcc、g++ 交叉编译测试

写个简单的demo测试一下

  • 虚拟机中:
    在这里插入图片描述
	/*
	* test.cpp
	* for cplusplus
	* test aarch64-linux-gnu-g++
	*/
	# include
	int main(int argc,char **argv)
	{
	    std::cout << "hello world!" <<std::endl;
	    return 0;
	}

虚拟机中编译

aarch64-linux-gnu-g++ test.cpp -o test

在这里插入图片描述
显然,在这里无法执行,然后将生成的可执行文件放到嵌入式板子上运行,权限不够的话记得加权限

  • Jetson nano开发板中
    在这里插入图片描述
    交叉编译环境配置成功!!!,可以查看文件的类型如下,是ARM的可执行文件
    在这里插入图片描述

1.3 编译Qt源码(编译出对应的arm64平台工具链)

方案:因为Jetson nano的资源较少,所以在自己的PC上配置ARM64的编译环境,配置Qt交叉编译环境,然后用Qt编译自己写的代码,在PC上编译完成后,copy到ARM平台上运行

1.3.1 qt-everywhere-src-5.14.2.tar.xz Qt源码

源码压缩文件下载地址
虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第8张图片
然后将压缩包 1 解压,得到文件夹 2.

1.3.2 修改编译配置文件

参考:
Ubuntu交叉编译aarch64版本qt
JetsonNano QT5.12.9交叉编译和环境搭建

  • 修改位于源码中的 qmake.conf 文件
    位置:qt-everywhere-src-5.14.2/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第9张图片
  • 文件内容如下:
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第10张图片
    上面红框中工具需要和自己的交叉编译工具,保持一致,否则编译失败
    添加如下的内容,进行修改:为何这样改,后面再研究 **qmake.conf** ,参数作用参考Qt5.12.11交叉编译+64位ARM_aarch64+全志H5 CortexA53
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts

修改后如下(Jetson-nano是armv8架构):
虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第11张图片

1.3.3 开始编译(此节的配置暂时有错误,还没有配置成功,直接看1.3.4)

进入源码目录cd qt-everywhere-src-5.14.2,创建文件 autoConfigure.sh 进行编译选项的配置

cd qt-everywhere-src-5.12.9/
touch autoConfigure.sh
chmod 777 autoConfigure.sh

内容如下:

#!/bin/sh
./configure \
-prefix /home/feiyangqu/myFile/Qt/Qt5.14.2-aarch64 \
-confirm-license \
-opensource \
-release \
-make libs \
-xplatform linux-aarch64-gnu-g++ \
-pch \
-qt-libjpeg \
-qt-libpng \
-qt-zlib \
-no-sse2 \
-no-cups \
-no-glib \
-no-dbus \
-no-opengl \
-no-xcb \
-no-separate-debug-info \
  • 直接在源码目录,即 autoConfigure.sh 文件在的目录运行./autoConfigure.sh,然后进行编译我遇到的问题以及解决:
  • 遇到问题:
    You don’t seem to have ‘make’ or ‘gmake’ in your PATH.
    Cannot proceed.
    在这里插入图片描述
    解决办法:安装build 的组件 sudo apt-get install build-essential,即可运行成功
    在这里插入图片描述
  • 然后再make,出现错误:Project ERROR: Building QtQml requires Python.
    在这里插入图片描述
    参考:从源代码构建Qt时找不到Python 和 building qtqml requires python
    解决如下:
    在这里插入图片描述

1.3.4 开始编译(请把该节读完再编译!!!提前排查自己遇到的错误)

前面运行./autoConfigure.sh错误较多,就直接终端使用了下面的语句然后make

  • 首先安装库:参考linux环境下编译Qt源码
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libegl1-mesa-dev
sudo apt-get install freeglut3-dev
sudo apt-get install libclang-dev
  • 然后终端进入源码文件夹,运行下面的命令进行配置
./configure -prefix /home/feiyangq/myFile/Qt/Qt5.14.2-aarch64 -make libs -xplatform linux-aarch64-gnu-g++ -no-opengl -skip qtdeclarative
  • 这里主要注意xplatform目标平台和extprefix安装目录:JetsonNano QT5.12.9交叉编译和环境搭建
-prefix 是QT编译后文件目录

-xplatform 是arm编译器类型,在qtbase/mkspecs目录下,根据自己交叉编译工具进行相应的替换

-no-opengl 跳过编译openGL(因为我已经安装了Qt,所以不需要界面)

-skip qtdeclarative 跳过 qtdeclarative(不跳过,编译出错,出错的原因不清楚)

如果有别的需求,可以./configure -help查看具体命令
  • 注意终端显示的信息,进行库的添加(在前面已经添加过了,此为添加前错误的截图):
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第12张图片
    make成功如下:虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第13张图片
    然后直接make install,就可以看到前面 configure 处 -prefix 参数的位置出现我们指定的安装目录:/home/feiyangq/myFile/Qt/Qt5.14.2-aarch64
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第14张图片
    安装成功!!!
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第15张图片

1.4 Qt配置交叉编译环境

1.4.1 打开Qt, 手动添加ARM64编译器

在qt creator中加入刚才编译安装的arm版qt,详细步骤参考:Ubuntu20.04.1(X86_64)Qt5.14.2配置ARM64交叉编译环境
不过打开编译器部分,我的已经可以在 Auto-detected 看到 arm64 的编译器。可能因为我是先编译源码,后用 run 文件安装的 Qt:
虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第16张图片
添加 GCC 的 C / C++编译器中的 aarch64-linux-gnu-gcc / g++,好奇的查了一下aarch64-linux-gnu-cpp,cpp是The C Preprocessor(预处理器):
虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第17张图片

  • 查看编译器位置,研究一下 usr/ 目录:
    在这里插入图片描述
    usr目录的研究:Linux 系统的/usr目录
    linux 中的 usr 是什么含义
    /bin, /sbin, /usr/sbin, /usr/bin 目录之简单区别
    Linux下/usr/bin与/usr/local/bin/区别总结
    总结要点:
    1. 不改变configure文件,Aotomake工具安装的应用就安装在 /usr/local/目录;
    2. usr是Unix Software Resource的缩写, 也就是Unix操作系统软件资源所放置的目录,而不是用户的数据;所有系统默认的软件都会放置到/usr, 系统安装完时,这个目录会占用最多的硬盘容量
    3. /bin是系统的一些指令。/sbin一般是指超级用户指令。 /usr/bin 是你在后期安装的一些软件的运行脚本。/usr/sbin 放置一些用户安装的系统管理的必备程式例如:dhcpd、httpd、imap、in.*d、inetd、named、netconfig、squid、swap、tcpd、tcpdump等。
    4. 新装的系统,运行一些很正常的诸如:shutdown,fdisk的命令时,提示:bash:command not found。那么首先就要考虑 root$PATH里是否已经包含了这些环境变量。可以查看PATH,如果是:PATH=$PATH:$HOME/bin则需要添加如下:PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin
    5. 查看 usr/bin/ 中和 aarch 相关的文件
      虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第18张图片
      再看一下 usr/ 中也有 aarch64-linux-gun 文件夹:
      在这里插入图片描述
      进入文件夹查看内容如下:
      虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第19张图片

1.4.2 添加QT Versions

QT Versions 中添加之前那编译源码得到的 交叉编译版的 Qt
虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第20张图片

1.4.2 添加构建套件(Kits)

虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第21张图片

1.5 新建工程&编译,测试是否成功

1.5.1 新建工程&编译

  • 新建一个项目,到构建套件(Kits)选择这一步时候,选择aarch64的套件:
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第22张图片build 构建项目,得到的项目文件夹如下:
    虚拟机Ubuntu20.04.4(X86_64)Qt5.14.2 配置 Jetson nano(ARM64)交叉编译环境(已完成) + Dokcker镜像(进行中)_第23张图片
  • 查看文件属性:验证成功!!!
    在这里插入图片描述

1.5.2 将文件传到Jetson nano开发板上进行测试

Jetson nano的Qt安装以及测试:待续。。。。

2. Docker中配置交叉编译环境

2.1Docker的安装

见文章:Docker的安装(Ubuntu 20.04 LTS)(包括对官方文档的介绍)
待续。。。。。
开了一个坑,会随着项目的进行持续更新。

你可能感兴趣的:(QT,Linux,Docker,qt,arm,ubuntu,linux,docker)