rk3568创建基于Ubuntu18.04交叉编译遇到的坑
尽管配置过rk3288,觉得rk3568也不会有啥问题,但还是掉坑了。
一、安装依赖库
安装完ubuntu后,先进行升级
sudo apt update
sudo apt upgrade
然后安装依赖库
$ sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools
$ sudo apt-get install device-tree-compiler gcc-aarch64-linux-gnu mtools parted
$sudo apt-get install libudev-dev libusb-1.0-0-dev python-linaro-image-tools
$ sudo apt-get install linaro-image-tools autoconf autotools-dev libsigsegv2 m4
$ sudo apt-get install intltool libdrm-dev curl sed make binutils build-essential gcc
$ sudo apt-get install g++ bash patch gzip bzip2 perl tar cpio python unzip rsync flex
$ sudo apt-get install bc wget libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev
$ sudo apt-get install libglade2-dev cvs git mercurial rsync openssh-client subversion
$ sudo apt-get install asciidoc w3m dblatex graphviz python-matplotlib libc6:i386
$ sudo apt-get install libssl-dev texinfo genext2fs
$ sudo apt-get install lib32stdc++6
$ sudo apt-get install g++-arm-linux-gnueabihf
$sudo apt-get install gcc-arm-linux-gnueabihf
$ sudo apt-get install g++-aarch64-linux-gnu
$ sudo apt-get install gcc-aarch64-linux-gnu
$ sudo apt-get install liblz4-tool lib32gcc-7-dev g++-7 libstdc++-7-dev
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386
$ sudo apt-get install openssh-server vim git fakeroot make gcc libssl-dev bc
二、获取交叉编译工具
荣品的可以从百度网盘里下载到,
gcc_for_rk356x_buildroot.tgz,然后在当前目录下解压到/opt下
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /opt/
然后添加环境变量,sudo vi ~/.bashrc 或者 sudo gedit ~/.bashrc
export PATH=$PATH:/opt/prebuilts/gcc/linux-x86/aarch64/gcc-buildroot-9.3.0-2020.03-x86 64 aarch64-rockcip-linux-gnu/bin
保存退出
然后运行 source ~/.bashrc 使环境变量生效
接下来,运行echo $PATH,如下图可见到刚添加的路径,表明环境变量添加成功。

而后,查看aarch64-rockchip-linux-gnu-gcc -v,aarch64-rockchip-linux-gnu-g++ -v 编译器版本,查到即成功。
三、准备qt的源码
先下载源码,查看arm板的lib文件,找到适合自己arm版本的qt源码。
例如我选择的荣品rk3568,是qt5.15.2,所以下载qt5.5.2的源码。
可以去清华大学、中科大等镜像源站去下载。qt的版本查找起来很乱。https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.15/5.15.2/single/下载源码,qt-everywhere-src-5.15.2.tar.xz
然后解压到当前目录下
tar -xvJf qt-everywhere-src-5.15.2.tar.xz
进入qt源码的如下目录并新建文件夹,例如
cd qt-everywhere-src-5.12.2/qtbase/mkspecs
mkdir linux-rockchip
cd linux-rockchip
touch qmake.conf # 配置交叉编译工具的文件
touch qplatformdefs.h**编辑 Vi qmake.conf**
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf,如果没有配置环境变量,这里一定要为绝对路径
#注:我配置了环境变量,不用绝对路径不行,不知道哪错了。
QMAKE_CC =aarch64-rockchip-linux-gnu-gcc
QMAKE_CXX = aarch64-rockchip-linux-gnu-g++
QMAKE_LINK =aarch64-rockchip-linux-gnu-g++
QMAKE_LINK_SHLIB=aarch64-rockchip-linux-gnu-g++
# modifications to linux.conf,如果没有配置环境变量,这里一定要为绝对路径
QMAKE_AR = aarch64-rockchip-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-rockchip-linux-gnu-objcopy
QMAKE_NM = aarch64-rockchip-linux-gnu-nm -P
QMAKE_STRIP =aarch64-rockchip-linux-gnu-strip
load(qt_config)
**再打开 qplatformdefs.h进行编辑**
#include "../linux-g++/qplatformdefs.h"
也可以采取下面的方式,利用原文件夹linux-aarch64-gnu-g++,然后直接修改qmake.conf中的QMAKE_CC等等,如下图所示。但要注意./configure 里边的参数-xplatform 也要替换为linux-aarch64-gnu-g++.
建立qt源码安装路径
Cd /usr/local
Mkdir qt-arm
Cd qt-arm
Mkdir QtEmbedded-9.3.0-arm
cd qt-everywhere-src-5.12.2,回到源码根目录,然后准备配置编译项,配置基本可以复制如下指令进行配置,需要注意的是参数-xplatform linux-rockchip。
./configure -prefix /usr/local/qt-arm/QtEmbedded-9.3.0-arm
-confirm-license -opensource -release -make libs -xplatform linux-rockchip -pch -qt-libjpeg -qt-libpng -qt-zlib -no-opengl -no-sse2 -no-openssl -no-cups -no-glib -dbus -no-xcb -no-separate-debug-info -no-iconv
但出现了问题,如下所示,无论在qmake.conf文件中的QMAKE_CC等用aarch64-rockchip-linux-gnu-gcc、全局路径.……/bin/aarch64-rockchip-linux-gnu-gcc,均存在以下问题。

查看 echo $PATH 是成功的,不知是何原因。无奈停摆。
然而,无意中翻到一个帖子(https://blog.csdn.net/qq_35529025/article/details/129526576)说:“aarch64-rockchip-linux-gnu是国产芯片的ToolChian。猜测与aarch64-linux-gnu兼容,因此后续很多编译与配置实际是使用aarch64-linux-gnu,并且成功。”
因为前边安装了 gcc-aarch64-linux-gnu,g+±aarch64-linux-gnu,运行aarch64-linux-gnu-g++ -v aarch64-linux-gnu-gcc -v也是可以查到的。

但实际上 aarch64-linux-gnu-gcc在/usr/bin/aarch64-linux-gnu-gcc,用的编译链也不是opt下的。
于是将qmake.conf中的aarch64-rockchip-linux-gnu改为aarch64-linux-gnu,再运./configure,居然过了。
然后,make -j4
sudo make install
然后,出现了这个错误,明明serialport,serialbus在源码里都有,但是还是有问题。

首先安装
sudo apt-get install qt5-default
sudo apt install libqt5serialport5
sudo apt install libqt5serialport5-dev
还是不行,
又看完这个,https://blog.csdn.net/jecychendf/article/details/139549552,发现serialbus没有lib、include、mkspecs,按这个说法操作,然后重新运行./configure,这步也过了。

然后,make -j4
sudo make install
结果又来了新问题,一步一个坎。 
删掉qtlocation 模块,然后再执行 ./configure,还是出错。
于是在 ./configure 参数中添加了 -skip qtlocation,然后再sudo make -j4,sudo make install,这里必须sudo make -j4,否则又有错误。
去QtEmbedded-9.3.0-arm文件夹下查看,终于编译完了,并将bin、lib加入环境变量。
最后为qt-everywhere-src-5.15.2安装安装并配置qtcreator,
执行命令:sudo apt-get install qtcreator
后续通过命令行qtcreator即可打开qtcreator,配置编译器、kit、qt版本等。然后新建一个04_can工程文件,选择rk3568编译生成可执行文件,用file查看,生成适用于arm下的可执行文件。

至此,完成了这个编译过程。
相关文章:
rk3568创建基于Ubuntu18.04交叉编译遇到的坑
尽管配置过rk3288,觉得rk3568也不会有啥问题,但还是掉坑了。 一、安装依赖库 安装完ubuntu后,先进行升级 sudo apt update sudo apt upgrade然后安装依赖库 $ sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-…...
对“一个中心,三重防护”中安全管理中心的理解
安全管理中心 本控制项为网络安全等级保护标准的技术部分。本项主要包括系统管理、审计管理、安全管理和集中管控四个控制点,其中的集中管控可以说是重中之重,主要都是围绕它来展开的。 28448基本要求中安全管理中心 8.1.5 安全管理中心 8.1.5.1 系统…...
jmeter用csv data set config做参数化1
在jmeter中,csv data set config的作用非常强大,用它来做批量测试和参数化非常好用。 csv data set config的常用配置项如下: Variable Names处,写上源文件中的参数名,用于后续接口发送请求时引用 Ignore first line…...
软件分享 丨eSearch 截图软件
在日常的工作和学习中,截图是一项非常常见且重要的操作。无论是记录重要的信息、制作教程,还是与他人分享有趣的内容,一款好用的截图软件都能让我们的效率大大提高。今天,就给大家分享一款功能强大的截图软件 - eSearch。 一、强…...
pytorh学习笔记——cifar10(一)生成数据
CIFAR(Canadian Institute For Advanced Research)是一个用于图像识别研究的数据集。CIFAR数据集包含多个子数据集,最常用的是CIFAR-10和CIFAR-100。 CIFAR-10数据集包含60000张32x32彩色图像,分为10个类别,每…...
pikachu靶场SSRF-curl测试报告
目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、实现ssrf攻击 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.1) 2、使用工具/软件 测试网址:…...
Java项目-基于Springboot的农机电招平台项目(源码+说明).zip
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...
Systemd:简介
1号进程 Systemd是linux系统的守护进程,它要管理正在运行的 Linux 主机的许多方面,包括挂载文件系统、管理硬件、处理定时器以及启动和管理生产性主机所需的系统服务。 $ ps -u -p 1 USER PID %CPU %MEM VSZ RSS TTY STAT START TI…...
Snapshot包和Release包区别
Snapshot包和Release包区别 Snapshot包: 代表开发中的版本,可能不稳定。 经常更新,包含最新的功能和修复。 通常用于测试和开发阶段。 Release包: 代表稳定的、经过全面测试的版本。 版本号通常是固定的,适合生产环…...
最近网站频繁跳转到黑产网站,怀疑是51.la统计代码的问题
最近我的几个网站,都出现了一个问题,就是访问的时候会莫名其妙的跳转到黑产网站。 通过排查了网页代码,发现网页都有一个共同点,就是使用了51.la统计。为什么会怀疑是51la统计代码问题?因为我的网页只有统计代码外没有…...
【python_修改PPT中字体,run.font.name只对英文生效怎么办?】
python_修改PPT中字体,run.font.name只对英文生效怎么办? 参考:使用pptx_ea_font库设置中文字体 from pptx import Presentation from pptx.util import Pt from pptx_ea_font import set_font# 打开现有的 PPT 文件 prs Presentation(D:\…...
【web】JDBC
项目连接数据库 右侧导航栏找到databsae 如果没有驱动,先下载驱动 填写数据库用户名密码 勾选对应的表即可 JDBC代码流程 1,配置信息 2,加载驱动 从MySQL Connector/J 5.1版本开始,推荐使用com.mysql.cj.jdbc.Driver这个新的驱动类。 3,链接数据库…...
MATLAB代码介绍:一段轨迹的指纹定位,KNN,三维,四个锚点(附源代码,可复制粘贴)
文章目录 产品介绍:三维指纹定位 KNN MATLAB 模型概述源代码运行结果功能亮点代码结构应用场景结论产品介绍:三维指纹定位 KNN MATLAB 模型 概述 本 MATLAB 代码实现了一种基于 KNN(K-Nearest Neighbors)算法的三维指纹定位系统,利用四个基站(锚点)信号强度进行移动终…...
XML Schema 复合空元素
XML Schema 复合空元素 XML Schema 是一种用于定义 XML 文档结构和内容的语言。在 XML Schema 中,元素可以被定义为简单类型或复杂类型。简单类型元素不能包含其他元素或属性,而复杂类型元素可以包含其他元素、属性或两者都有。复合空元素是一种特殊类型…...
Java面向对象编程基础(二)
Java面向对象编程基础二 一、package与import关键字的使用1.说明2.包的作用3.JDK中主要的包4. import5.import关键字的使用 二、封装性1.为什么要封装?2.如何封装?3.作用4.权限修饰符的权限大小5.案例 三、构造器1 构造器的使用说明2 案例: 四、实例变量赋值过程1 …...
[PHP]重复的Notice错误信息
<?php $a []; var_dump($a[name]);执行结果: 原因: display_errors和error_reporting都打开了Notice错误信息...
2024年第四届“网鼎杯”网络安全大赛-赛前模拟训练
文章目录 网络安全(WEB)签到题WEB01WEB02 二进制漏洞安全(PWN)PWN01潜在的安全漏洞分析攻击步骤exp 逆向工程(REVERSE)REVERSE01代码分析重构密码 密码学(CRYPTO)CRYPTO01CRYPTO02 杂…...
AI金融攻防赛:YOLO理论学习及赛题进阶思路(DataWhale组队学习)
引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的AI金融攻防赛学习总结文档。本文主要讲解如何在金融场景凭证篡改检测中应用YOLO算法。我们将从模型概述、数据准备、训练流程以及模…...
Spring Security 基础配置详解(附Demo)
目录 前言1. 基本知识2. Demo3. 实战 前言 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 HttpSecurity 是 Spri…...
代码随想录打卡Day1
文章目录 day011 数组理论基础2 二分查找法3 移除元素4 平方数 day01 Java JDK是17.0.11 1 数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 数组下标都是从0开始的。 数组内存空间的地址是连续的。 因为数组在内存空间的地址是连续的,所以我们…...
D435i多传感器标定全流程:从驱动安装到生成标定板的完整Checklist
D435i多传感器标定全流程:从驱动安装到生成标定板的完整Checklist 第一次接触D435i多传感器标定时,我被各种驱动安装、参数配置和标定工具搞得晕头转向。作为一款集成了RGB摄像头、双目视觉和IMU的深度相机,D435i在机器人导航、三维重建等领域…...
【数据可视化实战】从API到图表:一步步构建奥运奖牌榜与运动员数据分析平台
1. 数据获取:从API到结构化数据 做数据分析的第一步永远是获取数据。这次我们选择奥运奖牌榜和运动员数据作为案例,主要是因为这类数据公开透明且结构清晰,非常适合新手练手。我实测下来,咪咕视频的奥运数据接口非常稳定…...
从零到精通:我的泛微Ecology9二次开发实战笔记(含JS开发避坑指南)
从零到精通:我的泛微Ecology9二次开发实战笔记(含JS开发避坑指南) 第一次接触泛微Ecology9时,面对庞大的系统架构和复杂的二次开发文档,我像大多数新手一样感到无从下手。经过半年多的实战摸索,从环境搭建到…...
工业级模拟量采集模块:给排水流量采集,工业级抗干扰更耐用
模拟量采集模块在水利水电行业应用广泛,其核心作用是将水位、压力、温度等非电的物理量转换成标准的电信号(如4-20mA电流或0-5V电压),供计算机系统进行分析、控制与决策。它主要被集成到PLC(可编程逻辑控制器)、RTU(远程终端单元)、MCU(数据采集单元) 等…...
《Signal, Image and Video Processing》投稿避坑指南:从LaTeX排版到审稿全流程解析
1. 投稿前的准备工作 投稿到《Signal, Image and Video Processing》这类专业期刊,准备工作做得好能省去后期很多麻烦。首先得确认你的研究方向是否符合期刊范围,这个期刊主要接收信号处理、图像处理和视频处理相关的论文,主编的研究方向是深…...
知识图谱嵌入评估实战:从MRR到HITS@n的指标解析与应用
1. 知识图谱嵌入评估指标入门指南 第一次接触知识图谱嵌入评估时,我被各种缩写搞得晕头转向。MRR、MR、HITSn这些指标就像天书一样,直到我在实际项目中踩了几个坑才真正理解它们的意义。现在我就用最直白的语言,带你快速掌握这些核心指标。 …...
别再吹牛了,% Vibe Coding 存在无法自洽的逻辑漏洞!张
简介 langchain中提供的chain链组件,能够帮助我门快速的实现各个组件的流水线式的调用,和模型的问答 Chain链的组成 根据查阅的资料,langchain的chain链结构如下: $$Input \rightarrow Prompt \rightarrow Model \rightarrow Outp…...
3个颠覆性功能,让《空洞骑士》模组管理效率翻倍
3个颠覆性功能,让《空洞骑士》模组管理效率翻倍 【免费下载链接】Lumafly A cross platform mod manager for Hollow Knight written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/lu/Lumafly 你是否曾因模组依赖冲突而游戏崩溃?是否…...
保姆级教程:彻底解决VMware vCenter证书过期问题(含certificate-manager全流程)
深度解析:VMware vCenter证书体系与certificate-manager全流程操作指南 当你突然无法登录vCenter管理界面,看到浏览器弹出"此网站的安全证书已过期"的红色警告时,作为运维人员的肾上腺素立刻飙升。这不是普通的登录问题,…...
Nginx 学习总结犊
1. 引入 在现代 AI 工程中,Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的,官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为,最好的办法…...
