2. Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉编译环境
最近公司给了我一块Jetson Orin Nano的板子,先刷了系统(1.Jetson Orin Nano Developer Kit系统刷机)又让我搭建交叉编译环境,所以有了下面的文章
一 :Qt5.14.2交叉编译环境安装
1.准备
1.1设备环境
1.1.1 Server:
Ubuntu20.04:
Qt 源码 5.14.2
Qt 软件 5.14.2
gcc 版本 9.4.0
g++ 版本 9.4.0
1.1.2 Jetson Orin Nano :
Ubuntu 20.04
1.2 Qt相关下载地址
1.2.1 Qt源码下载
Qt源码下载(最好下载tar.xz,tar格式可能在windows下编辑过,后期可能会出现乱码的情况)
Index of /archive/qt/5.14/5.14.2/single
1.2.2 Qt软件下载地址
https://download.qt.io/archive/qt/5.14/5.14.2/

1.3 gcc和g++安装
Ubuntu 20.04系统默认安装g++和gcc版本是9.4.0,如果Ubuntu系统上没有g++和gcc安装命令:
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
安装好之后查看版本(如下图)
aarch64-linux-gnu-gcc -vaarch64-linux-gnu-g++ -v


1.4 Jetson Orin Nano Developer Kit 系统安装方法
Jetson 系统 自行安装
注意
- `SDK Manager`下使用的包是`JetPack5.1.1(rev.1);`
- 使用命令行安装使用的`BSP`包是`Jetson_Linux_R35.3.1_aarch64.tbz2`
`Sample Root Filesystem`是`Tegra_Linux_Sample-Root-Filesystem_R35.3.1_aarch64.tbz2`
2.Jetson Orin Nano Developer Kit 环境准备
2.1 设置root账号密码
sudo passwd root#设置Jetson Orin Nano root的账号密码
2.2 设置ssh
开启ssh保证其它用户能够通过ssh root@ip 访问,开启ssh为了文件拷贝等操作。
2.3 更新资源列表
sudo apt-get update #只是更新了apt的资源列表,没有真正的对系统执行更新。apt-get update是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
sudo apt-get upgrade #对比本地软件版本与源上软件版本,并更新本地版本到源上最新版本。
2.4 安装Qt依赖库
2.4.1 安装Qt依赖库
sudo apt-get install '.*libxcb.*' libxrender-dev libxi-dev libfontconfig1-dev libudev-dev
sudo apt-get install libgles2-mesa-dev libgl1-mesa-dev
2.4.2 软连接opengl es库
进入Jetson Orin Nano的/usr/lib/aarch64-linux-gnu/tegra-egl 目录,执行:
sudo ln -s libGLESv2_nvidia.so.2 libGLESv2.so
sudo ln -s libEGL_nvidia.so.0 libEGL.so
实际上只是将这两个英伟达提供的 gl 动态库重命名,不同的设备厂商提供的支持库名字可能会有差异;
3.Server编译Qt源码
3.1 在server上安装交叉编译器并配置环境变量
3.1.1 安装命令:
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
安装好后使用
which aarch64-linux-gnu-gc c#命令查看其安装位置
我的位置在`/usr/bin/aarch64-linux-gnu-gcc `下
安装后面所需要的其它工具
sudo apt-get install git bison python gperf pkg-config
sudo apt-get install make libclang-dev build-essential
3.2 配置环境变量
编译/etc/profile文件,
sudo vim /etc/profile
在编译模式下先按`i`进行文本插入,在文件底部加入` export PATH="/usr/bin:$PATH"`
然后按`ESC` 并输入`wq`保存。最后进行`source /etc/profile `更新环境变量,查看`/usr/bin`是否已经加入到环境变量,使用`echo ${PATH}`, 结果如下:
![]()
3.3 编译源码
3.3.1解压Qt源码
mkdir /opt/Qt5JetsonOrinNano
cd /opt/Qt5JetsonOrinNano
sudo chown username:username /opt/Qt5JetsonOrinNano#(username 是/home/ 下你的用户名) 修改Qt5JetsonOrinNano组
sudo tar xf qt-everywhere-src-5.14.2.tar.xz
3.3.2 同步Jeston Orin Nano上的库到本地
在/opt/Qt5JetsonOrinNano目录下使用mkdir sysroot创建sysroot文件夹,然后同步Jetson Orin Nano上面的库到Server上
rsync -avz root@JetsonOrinNanoIp:/lib sysroot
rsync -avz root@ JetsonOrinNanoIp:/usr/include sysroot/usr
rsync -avz root@ JetsonOrinNanoIp:/usr/lib sysroot/usr
3.3.3 修改sysroot软链接
在同步库后,然后需要修改sysroot里面的软链接,里面有很多软连接使用的都是绝对路径,那就会直接链接到你PC的/usr、/lib目录里面去,那肯定是错的,我们希望它们链接到 sysroot里面对应的库。所以我们需要把绝对路径改成相对路径。直接用网上现成的python脚本完成(有时会连接超时,自己想办法下载)。
sudo wget https://github.com/Kukkimonsuta/rpi-buildqt/blob/master/scripts/utils/sysroot-relativelinks.py
脚本内容如下:
#!/usr/bin/env python
import sys
import os# source: https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py# Take a sysroot directory and turn all the absolute symlinks and turn them into
# relative ones such that the sysroot is usable within another system.if len(sys.argv) != 2:print("Usage is " + sys.argv[0] + "<directory>")sys.exit(1)topdir = sys.argv[1]
topdir = os.path.abspath(topdir)def handlelink(filePath, subdir):link = os.readlink(filePath)if link[0] != "/":returnif link.startswith(topdir):returnnewLink = os.path.relpath(topdir+link, subdir)print("\t%s replacing %s => %s" % (filePath, link, newLink))os.unlink(filePath)os.symlink(newLink, filePath)for subdir, dirs, files in os.walk(topdir):for file in files:filePath = os.path.join(subdir, file)if os.path.islink(filePath):handlelink(filePath, subdir)
然后给sysroot-relativelinks.py添加权限
sudo chmod +x sysroot-relativelinks.py
运行文件
./sysroot-relativelinks.py sysroot #修改sysroot下相关Lib的软链接
rsync -avz root@JetsonOrinNanoIp:/lib sysroot #我这是不放心又同步一次
rsync -avz root@ JetsonOrinNanoIp:/usr/include sysroot/usr
./sysroot-relativelinks.py sysroot
3.3.4创建Jetson Orin Nano的qmake.conf文件
先查看devices下支持的设备
ls qt-everywhere-src-5.14.2/qtbase/mkspecs/devices/
查看qt源码下支持的设备,由于没有 Nano 文件夹,我们使用相似的linux-jetson-tx1-g++`复制一份`jetson orin nano`的文件夹,
cp -r qt-everywhere-src-5.14.2/qtbase/mkspecs/devices/linux-jetson-tx1-g++/ qt-everywhere-src-5.14.2/qtbase/mkspecs/devices/linux-jetson-orin-nano/
修改`qt-everywhere-src-5.14.2/qtbase/mkspecs/devices/linux-jetson-orin-nano/qmake.conf`文件,内容如下:
#
# qmake configuration for the Jetson Orin Nano boards running Linux For Tegra
#
# Note that this environment has been tested with X11 only.
#
# A typical configure line might look like:
# configure \
# -device linux-jetson-orin-nano \
# -device-option CROSS_COMPILE=/usr/bin/aarch64-linux-gnu- \
# -sysroot /opt/Qt5JetsonOrinNano/sysrootinclude(../common/linux_device_pre.conf)QMAKE_INCDIR_POST += \$$[QT_SYSROOT]/usr/include \$$[QT_SYSROOT]/usr/include/aarch64-linux-gnuQMAKE_LIBDIR_POST += \$$[QT_SYSROOT]/usr/lib \$$[QT_SYSROOT]/lib/aarch64-linux-gnu \$$[QT_SYSROOT]/usr/lib/aarch64-linux-gnuQMAKE_RPATHLINKDIR_POST += \$$[QT_SYSROOT]/usr/lib \$$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu \$$[QT_SYSROOT]/lib/aarch64-linux-gnuQMAKE_INCDIR_EGL = $$[QT_SYSROOT]/usr/lib/aarch64-linux-gnu/tegra-egl
DISTRO_OPTS += aarch64
COMPILER_FLAGS += -march=armv8-a+crc+crypto
EGLFS_DEVICE_INTEGRATION = eglfs_kms_egldevice
include(../common/linux_arm_device_post.conf)
load(qt_config)
3.3.5建立编译文件夹
mkdir Qt5Build
cd Qt5Build
配置make 的编译环境
sudo ../qt-everywhere-src-5.14.2/configure -opengl es2 -xcb -device linux-jetson-orin-nano -device-option CROSS_COMPILE=/usr/bin/aarch64-linux-gnu- -sysroot /opt/Qt5JetsonOrinNano/sysroot -prefix /usr/local/Qt5JetsonOrinNano -opensource -confirm-license -skip qtmultimedia -skip qtscript -skip qtwebengine -force-debug-info -skip qtdatavis3d -skip qtlocation -nomake examples -make libs -pkg-config -no-eglfs -no-use-gold-linker -v
出现错误([(1条消息) Ubuntu18源码编译安装qt5.15.3和MeshLab踩坑_error: feature 'xcb' was enabled, but the pre-cond_JaceYangg的博客-CSDN博客]
ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread &&..... #出现这个问题,把上面命令中的 -xcb-xlib配置项去掉。可以-xcb 不删除。
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
如果还有问题,再查找其解决方案
编译:
sudo make -j4

等待编译完成之后再进行安装
sudo make install

安装后的目录如下:

查看编译生成目录下的qmake是否存在,用于配置qtcreator的qmake环境
![]()
把编译生成的相关库同步到Jetson Orin Nano上。
sudo rsync -avz sysroot/usr/local/Qt5JetsonOrinNano root@ JetsonOrinNanoIp:/usr/local
至此QT源码编译完成。
4.Server交叉编译代码到Jetson Orin Nano上
4.1 在Server上创建一个`test`文件夹
mkdir testCrossCompiler &&cd testCrossCompilertouch hello.cppvim hello.cpp
#include <QCoreApplication>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);qDebug() << "Hello World";return a.exec();
}
4.2使用编译Qt源码生成的qmake编译项目 生成.pro文件
4.2.1 在testCrossCompiler目录下使用`qmake`命令
/opt/Qt5JetsonOrinNano/sysroot/usr/local/Qt5JetsonOrinNano/bin/qmake -project
![]()
4.2.2 使用`qmake`生成`Makefile`文件

4.2.3 使用命令`make`生成`arm`文件

4.2.4 拷贝文件到`Jetson Orin Nano`上运行
scp ./testCrossCompiler nvidia@JetsonOrinNanoIp:/home/nvidia/Downloads/test
4.2.5 在Jetson Orin Nano上运行编译生成的文件
./testCrossCompiler

下面会出Server上配置ARM的交叉编译环境。
好久没有写文章了。上面的应该勉强能看。如有问题请提出,我不会修改的(哈哈)。如果按照步骤弄不成,多找找自身的原因(手动滑稽)。
最后最后,有问题请在评论区提出,我会帮助解决。感谢查看
相关文章:
2. Linux Server 20.04 Qt5.14.2配置Jetson Orin Nano Developer Kit 交叉编译环境
最近公司给了我一块Jetson Orin Nano的板子,先刷了系统(1.Jetson Orin Nano Developer Kit系统刷机)又让我搭建交叉编译环境,所以有了下面的文章 一 :Qt5.14.2交叉编译环境安装 1.准备 1.1设备环境 1.1.1 Server: Ubuntu20.0…...
vue入门
Attribute 绑定 v-bind:取值方式 开发前准备 安装node.js需要高于15.0 创建vue项目 npm init vuelatest安装 npm install 启动 npm run dev模板语法 文本插值 {{ 变量 }} <p> {{ mesg }} </p>这种方式公支持单一表达式,也可以是js代码…...
区块链中slot、epoch、以及在slot和epoch中的出块机制,分叉原理(自己备用)
以太坊2.0中有两个时间概念:时隙槽slot 和 时段(周期)epoch。其中一个slot为12秒,而每个 epoch 由 32 个 slots 组成,所以每个epoch共384秒,也就是 6.4 分钟。 对于每个epoch,使用RANDAO伪随机…...
免费开源的vue+express搭建的后台管理系统
此项目已开源 前端git地址:exp后台管理系统前端: exp后台管理系统前端 后端git地址:express后台管理系统: express后台管理系统 安装运行 npm i yarn i 前端: npm run dev | yarn dev 后端: npm run start | yarn start 主要技术栈 前端后端名称版本名…...
【开发】视频云存储EasyCVR视频汇聚平台AI智能算法定制
安防视频集中存储EasyCVR视频汇聚平台,可支持海量视频的轻量化接入与汇聚管理。平台能提供视频存储磁盘阵列、视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联、H.265自动转码等功能。为了便…...
Ribbon:负载均衡及Ribbon
什么是负载均衡? 第一种轮询算法,依次遍历去执行,达到负载均衡 集成Ribbon 导入pom,在消费者服务里的pom文件导入 <!-- Ribbon 集成 --><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spr…...
【声波】声波在硼酸、硫酸镁 (MgSO4) 和纯水中的吸收研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
使用swoole实现实时消息推送给客户端
一. 测试服务端 //测试服务端public function testServer(){$server new Server(192.168.0.144, 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);$server->on(request, function ($request, $response) {$response->header(Content-Type, text/plain);$response->end("He…...
Ordinals 之后,以太坊铭文协议 Ethscriptions 如何再塑 NFT 资产形态
随着加密市场的发展,NFT 赛道逐渐形成了其独有的市场。但在加密熊市的持续影响下,今年 NFT 赛道的发展充满坎坷与挑战。据 NFTGO 数据显示,截至 8 月 7 日,与去年相比,NFT 市值总计约 56.4 亿美元,过去 1 年…...
Python绘制爱心代码(七夕限定版)
写在前面: 又到了一年一度的七夕节啦!你还在发愁送女朋友什么礼物,不知道怎样表达你满满的爱意吗?别担心,我来帮你!今天,我将教你使用Python绘制一个跳动的爱心,用创意和幽默为这个…...
Java两整数相除向上取整
方法一:通过三目运算符 (简单移动) x / y (x % y ! 0 ? 1 : 0);方法二:通过ceil函数(不推荐使用,涉及类型转换) (int)Math.ceil((double)x/y);// 或者(int)Math.ceil(x * 1.0 /y);方法三&…...
Linux学习之Telnet明文漏洞
yum install telnet telnet-server xinetd -y安装软件。 systemctl start xinetd.service开启xinetd,systemctl start telnet.socket开启telnet。 xinetd来监控端口,然后把数据传给telnet。 ifconfig eth0看一下eth0网卡信息,。 iptable…...
产品经理如何提高用户画像效果?SIKT模型
产品经理做用户画像,最担心被业务方反馈:没效果。这往往是由用户画像与业务场景脱节造成的。那么我们该如何从业务场景出发,让用户画像更有效?一般来说,我们可以采用SIKT模型解决这个问题。 用户画像 1、SIK…...
ubuntu安装Microsoft Edge并设置为中文
1、下载 edge.deb 版本并安装 sudo dpkg -i microsoft-edg.deb 2. 设置默认中文显示 如果是通过.deb方式安装的: 打开默认安装路径下的microsoft-edge-dev文件,在文件最开头加上: export LANGUAGEZH-CN.UTF-8 ,保存退出。 cd /opt/micr…...
Host/ KVM/ Docker/ K8s/ OpenStack/ Mesos简单介绍和区别
Host/ KVM/ Docker/ Kubernetes/ OpenStack 和 Mesos 的简单介绍: - Host: Host 是指物理服务器或虚拟机主机,它们可以运行多个虚拟机或容器来提供计算和存储资源。Host 是云计算和容器化技术中的基本组成部分。 - KVM: KVM 是…...
关于Transformer中的位置编码
位置编码 (Positional Encoding) 位置编码是在自然语言处理中,特别是在 Transformer 架构中使用的一个重要概念。Transformer 架构由于其自注意力机制 (Self-Attention Mechanism) 的特性,对序列中的元素没有固有的顺序感知。这意味着,如果不…...
ABAP 期初库存批量导入 demo1
&--------------------------------------------------------------------- *& Report ZMMCP005 &--------------------------------------------------------------------- 作者: Liv完成日期:描述: 期初库存导入需求简要说明&…...
想用 Python 写游戏,都有哪些好用的游戏开发库?
虽然 Python 在网络爬虫、人工智能、数据分析方面有广泛应用,但它并不是一门专门做游戏开发的编程语言,不过对于小型的游戏开发,Python 还是挺香的。下面为大家介绍几个支持 Python 的 2D、3D 游戏开发库,使用它们,你可以设计出很多有意思的小游戏! Cocos2d Cocos2d 是…...
vue3 路由缓存问题
目录 解决问题的思路: 解决问题的方案: 1、给roter-view添加key(破坏复用机制,强制销毁重建) 2、使用beforeRouteUpdate导航钩子 3、使用watch监听路由 vue3路由缓存:当用户从/users/johnny导航到/use…...
如何找到一个数的所有质因数,以及如何快速判断一个数是不是质数
前情介绍 今天遇到一个需求:找到一个数所有的质因数。 初步解决 先定义一个判断质数的函数: def is_Prime(number):i 2count 0while i < number:if number % i 0 :count 1i 1if count > 0:return Falseelse:return True 接着定义一个寻找质…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
