嵌入式linux之QT交叉编译环境搭建(最简单实测通用版)

这里总结下用于嵌入式linux下的QT交叉编译环境搭建,留作备忘,分享给有需要的小伙伴。不管你的是什么嵌入式linux环境,实测过的通用方法总结。

环境准备

需要准备的环境要求如下:

1.虚拟机(vmvare15.5)

2.ubuntu18.04-x64的linux系统镜像

3.qt安装包(qt-5.12.9)

4.交叉编译工具链(一般厂家会提供)

vmvare15.5下载

VMWare (Virtual Machine ware)是一个虚拟机软件,它可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。

 下载地址

VMware-workstation-full-15.5.0-14665864.exe_免费高速下载|百度网盘-分享无限制

虚拟机的网络设置

 NAT 连接方式

默认情况下,虚拟机安装完成后网络连接方式如下图所示为 NAT,与宿主机共享一个 IP 地址,我们在进行依赖包的安装,代码的编译等工作时是不需要更改的。
在虚拟机中,VMware 虚拟网卡设置为 NAT 模式时,Ubuntu 环境中网络设置为动态 IP 即可。在这种模式下虚拟 NAT 设备和主机网卡相连通信上网。这种事我们虚拟机上外网最常用的方式。

桥接的连接方式
VMware 虚拟网卡设备为桥接模式时,主机网卡和虚拟机网卡通过虚拟网桥进行通信,需要在 Ubuntu环境中设置网络 IP 与主机在同一个网段,如果需要上外网需要设置 DNS 与主机网卡一致。如果在使用TFTP,SFTP 等服务器时则需要设置虚拟机的网络联系方式为桥接方式。

更新系统镜像源

ubuntu18自带的镜像源下载很慢,替换镜像源的是必要的。免不了要联网下载安装一些东西。

先备份:cp /etc/apt/sources.list   /etc/apt/sources.list.bak
再将以下源文件复制到/etc/apt/sources.list

可以使用Vi或者gedit打开。

阿里镜像源

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

华为镜像源

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://repo.huaweicloud.com/ubuntu jammy main restricted
# deb-src http://repo.huaweicloud.com/ubuntu jammy main restricted## Major bug fix updates produced after the final release of the
## distribution.
deb http://repo.huaweicloud.com/ubuntu jammy-updates main restricted
# deb-src http://repo.huaweicloud.com/ubuntu jammy-updates main restricted## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://repo.huaweicloud.com/ubuntu jammy universe
# deb-src http://repo.huaweicloud.com/ubuntu jammy universe
deb http://repo.huaweicloud.com/ubuntu jammy-updates universe
# deb-src http://repo.huaweicloud.com/ubuntu jammy-updates universe## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://repo.huaweicloud.com/ubuntu jammy multiverse
# deb-src http://repo.huaweicloud.com/ubuntu jammy multiverse
deb http://repo.huaweicloud.com/ubuntu jammy-updates multiverse
# deb-src http://repo.huaweicloud.com/ubuntu jammy-updates multiverse## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://repo.huaweicloud.com/ubuntu jammy-backports main restricted universe                                                                                                    multiverse
# deb-src http://repo.huaweicloud.com/ubuntu jammy-backports main restricted uni                                                                                                   verse multiversedeb http://repo.huaweicloud.com/ubuntu jammy-security main restricted
# deb-src http://repo.huaweicloud.com/ubuntu jammy-security main restricted
deb http://repo.huaweicloud.com/ubuntu jammy-security universe
# deb-src http://repo.huaweicloud.com/ubuntu jammy-security universe
deb http://repo.huaweicloud.com/ubuntu jammy-security multiverse
# deb-src http://repo.huaweicloud.com/ubuntu jammy-security multiverse

编译环境依赖配置

sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1g:i386 libc6:i386
// 32位兼容依赖库
//使用网络配置工具和 menuconfig 时还需要安装以下库:
linx@ubuntu:~$ sudo apt-get update //更新下载源信息
linx@ubuntu:~$ sudo apt-get install net-tools //网络配置工具sudo apt-get install lzop // 安装 lzop 工具,用于生成压缩或解压镜像
sudo apt-get install libncurses* // 安装 ncurese 相关库,U-boot 或者内核菜单显示时需要//安装一些三方开源库需要
sudo apt-get install -y autoconf automake libtool
sudo apt-get install autoconf-archive
sudo apt-get install m4sudo apt install pkg-config

QT下载

https://download.qt.io/archive/qt/

注意事项

QT的安装包可以直接从官网下载linux上的安装包,安装即可。如:https://download.qt.io/archive/qt/5.12/5.12.9/ qt-opensource-linux-x64-5.12.9.run

注意事项,因为最终目的是开发板的嵌入式环境下使用。所以上述只是安装了在linux电脑上的QT环境。最终是需要交叉编译,才可以在嵌入式linux板上运行。需要确定下你的交叉编译工具链是否包含了QT的头文件和库。一般开发板厂家都提供了现成的包含QT的交叉编译工具链,所以不需要从新编译QT的源码。打开Qtcreater,只需配置交叉编译的工具链即可。

有的文章中介绍的很麻烦,比如单独安装qtcreater之类的不需要的。直接下载的qt5.12.9中包含qt的sdk和qtcreater。

安装QT遇到的问题

Qt version is not properly installed,please run make install

1.直接copy别人安装好的QT库,在自己电脑上编译时提示Qt version is not properly installed,please run make install。

2.从网上查找发现原因:原来是qmake.exe是在Qt安装编译时生成的,里面内嵌了Qt相关的一些路径。如果直接copy过来,自己的路径结构与原来不同,则Qt库就不能正常使用。

3.解决方法:在qmake.exe所在目录新建一个文本文件,将下面的内容写入文本文件,并将文件命名为qt.conf即可。
内容修改:

[Paths]
Prefix=/usr
HostPrefix=/home/t507/tmp/OKT507/err_OKT507_buildroot/OKT507-linux-sdk/out/t507/okt507/longan/buildroot/host
Sysroot=/home/t507/tmp/OKT507/err_OKT507_buildroot/OKT507-linux-sdk/out/t507/okt507/longan/buildroot/host/aarch64-buildroot-linux-gnu/sysroot
Headers=/usr/include/qt5
Plugins=/usr/lib/qt/plugins
Examples=/usr/lib/qt/examples

error: Cannot run target compiler '/home/t507/tmp/OKT507/err_OKT507_buildroot/OKT507-linux-sdk/out/t507/okt507/longan/buildroot/host/bin/aarch64-linux-gnu-g++'. Output:

报这个错是因为从别处拷贝的别人的工具链。那么很多软链接应该是找不到的。需要运行以下脚本,删除旧的工具链的软链接,从新建立新的软链接。

changeSdkLocation.sh脚本内容如下:

#!/bin/sh
#
if [ "$#" -ne 0 ]; thenecho "Run this script to relocate the buildroot SDK at that location"exit 1
fiLOCFILE="share/buildroot/sdk-location"
FILEPATH="$(readlink -f "$0")"
NEWPATH="$(dirname "${FILEPATH}")"LICHEE_BR_OUT="/opt/okt507/buildroot"
LICHEE_OUT_DIR="/opt/okt507/buildroot"cd "${NEWPATH}"
if [ ! -r "${LOCFILE}" ]; thenecho "Previous location of the buildroot SDK not found!"exit 1
fi
OLDPATH="$(cat "${LOCFILE}")"#if [ "${NEWPATH}" = "${OLDPATH}" ]; then
#    echo "This buildroot SDK has already been relocated!"
#    exit 0
#fiFIX_LIST="
aarch64-linux-gnu-addr2line \
aarch64-linux-gnu-ar \
aarch64-linux-gnu-as \
aarch64-linux-gnu-c++ \
aarch64-linux-gnu-c++filt \
aarch64-linux-gnu-cpp \
aarch64-linux-gnu-dwp \
aarch64-linux-gnu-elfedit \
aarch64-linux-gnu-g++ \
aarch64-linux-gnu-gcc \
aarch64-linux-gnu-gcc-7.4.1 \
aarch64-linux-gnu-gcc-ar \
aarch64-linux-gnu-gcc-nm \
aarch64-linux-gnu-gcc-ranlib \
aarch64-linux-gnu-gcov \
aarch64-linux-gnu-gcov-dump \
aarch64-linux-gnu-gcov-tool \
aarch64-linux-gnu-gdb \
aarch64-linux-gnu-gdb-add-index \
aarch64-linux-gnu-gfortran \
aarch64-linux-gnu-gprof \
aarch64-linux-gnu-ld \
aarch64-linux-gnu-ld.bfd \
aarch64-linux-gnu-ld.gold \
aarch64-linux-gnu-nm \
aarch64-linux-gnu-objcopy \
aarch64-linux-gnu-objdump \
aarch64-linux-gnu-ranlib \
aarch64-linux-gnu-readelf \
aarch64-linux-gnu-size \
aarch64-linux-gnu-strings \
aarch64-linux-gnu-strip
"for str in $FIX_LIST
dorm bin/$strln -s $LICHEE_OUT_DIR/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/$str $LICHEE_BR_OUT/host/bin/$str
done[ -L $LICHEE_BR_OUT/staging ] && rm $LICHEE_BR_OUT/staging
ln -s $LICHEE_BR_OUT/host/aarch64-buildroot-linux-gnu/sysroot $LICHEE_BR_OUT/staging# Check if the path substitution does work properly, e.g.  a tree
# "/a/b/c" copied into "/a/b/c/a/b/c/" would not be allowed.
newpath="$(sed -e "s|${OLDPATH}|${NEWPATH}|g" "${LOCFILE}")"
if [ "${NEWPATH}" != "${newpath}" ]; thenecho "Something went wrong with substituting the path!"echo "Please choose another location for your SDK!"exit 1
fiecho "Relocating the buildroot SDK from ${OLDPATH} to ${NEWPATH} ..."# Make sure file uses the right language
export LC_ALL=C
# Replace the old path with the new one in all text files
grep -lr "${OLDPATH}" . | while read -r FILE ; doif file -b --mime-type "${FILE}" | grep -q '^text/' && [ "${FILE}" != "${LOCFILE}" ]thensed -i "s|${OLDPATH}|${NEWPATH}|g" "${FILE}"fi
done# At the very end, we update the location file to not break the
# SDK if this script gets interruted.
sed -i "s|${OLDPATH}|${NEWPATH}|g" ${LOCFILE}

接着又报错: 

原因是,gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu\libexec\gcc\aarch64-linux-gnu\7.4.1\liblto_plugin.so ,该软连接失效了,从新软链接下。

软链接失效的问题, 最可能是从windows下直接拷贝导致的。建议拷贝到虚拟机中,不要直接拷贝文件夹。正确做法应该是解压缩。

其他资源

ubuntu搭建qt的arm交叉编译环境_ubuntu编译qt源码_小爷帅的惊动d的博客-CSDN博客

Ubuntu20.04.1(X86_64)Qt5.14.2配置ARM64交叉编译环境_Kwok HQ的博客-CSDN博客

https://www.cnblogs.com/dancefire/archive/2011/03/09/fix-bad-superblock-in-linux.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/56755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】探讨蕴藏在表达式求解中的因素

🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:C语言 🔥该篇将探讨 操作符 和 类型转换 对表达式求解的影响。 目录: 隐式类型转换算术转换操作符的属性❤️ 结语 隐…

linux重定向

bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错…

CSDN每日一练 |『异或和』『生命进化书』『熊孩子拜访』2023-08-27

CSDN每日一练 |『异或和』『生命进化书』『熊孩子拜访』2023-08-27 一、题目名称:异或和二、题目名称:生命进化书三、题目名称:熊孩子拜访 一、题目名称:异或和 时间限制:1000ms内存限制:256M 题目描述&…

C++:list使用以及模拟实现

list使用以及模拟实现 list介绍list常用接口1.构造2.迭代器3.容量4.访问数据5.增删查改6.迭代器失效 list模拟实现1.迭代器的实现2.完整代码 list介绍 list是一个类模板&#xff0c;加<类型>实例化才是具体的类。list是可以在任意位置进行插入和删除的序列式容器。list的…

java:详解http模块request对象

文章目录 背景继承关系获取数据request获取请求行数据获取请求头数据获取请求体数据 示例&#xff1a;防盗链其他功能获取请求参数通用方式请求转发共享数据获取ServletContext 背景 在 Java 中&#xff0c;HTTP 模块的 request 对象和 response 对象分别表示客户端向服务器发…

Python序列类型

序列&#xff08;Sequence&#xff09;是有顺序的数据列&#xff0c;Python 有三种基本序列类型&#xff1a;list, tuple 和 range 对象&#xff0c;序列&#xff08;Sequence&#xff09;是有顺序的数据列&#xff0c;二进制数据&#xff08;bytes&#xff09; 和 文本字符串&…

Android BatteryManager的使用及BatteryService源码分析

当需要监控系统电量时&#xff0c;用 BatteryManager 来实现。 参考官网 监控电池电量和充电状态 获取电池信息 通过监听 Intent.ACTION_BATTERY_CHANGED 广播实现&#xff0c;在广播接收器中获取电池信息。 这是个粘性广播&#xff0c;即使过了广播发出的时间点后再注册广…

从零起步:学习数据结构的完整路径

文章目录 1. 基础概念和前置知识2. 线性数据结构3. 栈和队列4. 树结构5. 图结构6. 散列表和哈希表7. 高级数据结构8. 复杂性分析和算法设计9. 实践和项目10. 继续学习和深入11. 学习资源12. 练习和实践 &#x1f389;欢迎来到数据结构学习专栏~从零起步&#xff1a;学习数据结构…

Java实现根据短连接获取1688商品详情数据,1688淘口令接口,1688API接口封装方法

要通过1688的API获取商品详情数据&#xff0c;您可以使用1688开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过1688开放平台API获取商品详情属性数据接口&#xff1a; 首先&#xff0c;确保您已注册成为1688开放平台的开发者&#xf…

研华I/O板卡 Win10+Qt+Cmake 开发环境搭建

文章目录 一.研华I/O板卡 Win10QtCmake 开发环境搭建 一.研华I/O板卡 Win10QtCmake 开发环境搭建 参考这个链接安装研华I/O板卡驱动程序系统环境变量添加研华板卡dll Qt新建一个c项目 cmakeList.txt中添加研华库文件 cmake_minimum_required(VERSION 3.5)project(advantechDA…

设计模式(23种)简介

什么是设计模式&#xff1f; 设计模式&#xff08;Design pattern&#xff09;是解决特定问题的一系列套路&#xff0c;是前辈们的代码设计经验的总结。设计模式针对的是面向对象的语言。多态是设计模式的灵魂。 设计模式的优点&#xff1a; 可以提高程序员的思维能力、编程能…

【多线程】Thread类的用法

文章目录 1. Thread类的创建1.1 自己创建类继承Thread类1.2 实现Runnable接口1.3 使用匿名内部类创建Thread子类对象1.4 使用匿名内部类创建Runnable子类对象1.5 使用lambda创建 2. Thread常见的构造方法2.1 Thread()2.2 Thread(Runnable target)2.3 Thread(String name)2.4 Th…

软考高级系统架构设计师系列论文九十四:论计算机网络的安全性设计

软考高级系统架构设计师系列论文九十四:论计算机网络的安全性设计 一、计算机网络安全性设计相关知识点二、摘要三、正文四、总结一、计算机网络安全性设计相关知识点 软考高级系统架构设计师:计算机网络

全国三网话费充值优惠接口源码文档分享

话费充值接口文档 接口版本&#xff1a;1.0 ―、引言 文档概述 本文档提供话费充值接口规范说明&#xff0c;提供一整套的完整的接入示例(http 接口)供商户参 考&#xff0c;可以帮助商户开发人员快速完成接口开发与联调&#xff0c;实现与话费充值系统的交易互联。 公司官网…

Flink_state 的优化与 remote_state 的探索

摘要&#xff1a;本文整理自 bilibili 资深开发工程师张杨&#xff0c;在 Flink Forward Asia 2022 核心技术专场的分享。本篇内容主要分为四个部分&#xff1a; 相关背景state 压缩优化Remote state 探索未来规划 点击查看原文视频 & 演讲PPT 一、相关背景 1.1 业务概况 从…

【EI检索稳定】第六届电力电子与控制工程国际学术会议(ICPECE 2023)

第六届电力电子与控制工程国际学术会议 2023 6th International Conference on Power Electronics and Control Engineering (ICPECE 2023) 第六届电力电子与控制工程国际学术会议由广西大学主办&#xff0c;重庆大学、华东交通大学、长春理工大学、大连交通大学联合主办。电…

【AI模型】gym强化学习仿真平台配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍gym强化学习仿真平台配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…

Linux内核学习(十)—— 块 I/O 层(基于Linux 2.6内核)

目录 一、剖析一个块设备 二、缓冲区和缓冲区头 三、bio 结构体 四、请求队列 五、I/O 调度程序 系统中能够随机&#xff08;不需要按顺序&#xff09;访问固定大小数据片&#xff08;chunks&#xff09;的硬件设备称作块设备&#xff0c;这些固定大小的数据片就称作块。最…

为什么会形成缓存雪崩?缓存雪崩解决方案

什么是缓存雪崩 缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库&#xff0c;瞬间耗尽数据库资源&#xff0c;导致数据库无法使用。 造成缓存雪崩问题的原因是是大量key拥有了相同的过期时间&#xff0c;比如对课程信息设置缓存过期时间为10分钟&#xff0…

回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#…