嵌入式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.rhkb.cn/news/109095.html

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

相关文章

Linux 基金会宣布正式进驻中国

在 LinuxCon 2017 (北京)即将召开前夕,我们Linux 中国会同 51CTO、开源中国对 Linux 基金会执行董事 Jim Zemlin 进行了一场远跨大洋的视频专访。 在这次专访中,Jim 先生回答了几个开源界和互联网领域关注的问题,并披…

Vue3.0极速入门 - 登录demo

Talk is cheap, Show the code 在完成npm和vue的环境安装,并了解了基本的目录和文件结构以后,直接写一个带登录和首页的demo做示例,快速了解一个vue工程的创建和基本的页面跳转 第一步创建工程 1、选择手动模式创建工程 npm create app-…

云服务器(Centos7系统)配置JAVA+mysql+tomcat 环境

文章主要内容来源云服务器(Centos7系统)部署javaweb项目(二)配置JAVAmysqltomcat 环境_man_zuo的博客-CSDN博客 模仿途中遇到的问题 连接无效 有时连接无法下载,可能是过期了,将其更换为官网给的下载连接即…

五、Kafka消费者

目录 5.1 Kafka的消费方式5.2 Kafka 消费者工作流程1、总体流程2、消费者组原理3、消费者组初始化流程4、消费者组详细消费流程 5.3 消费者API1 独立消费者案例(订阅主题)2 独立消费者案例(订阅分区)3 消费者组案例 5.4 生产经验—…

4.22 TCP 四次挥手,可以变成三次吗?

目录 为什么 TCP 挥手需要四次呢? 粗暴关闭 vs 优雅关闭 close函数 shotdown函数 什么情况会出现三次挥手? 什么是 TCP 延迟确认机制? TCP 序列号和确认号是如何变化的? 在一些情况下, TCP 四次挥手是可以变成 T…

冲破时代鸿沟,Linus和Eversheet,杰出程序员的创新成果

在80年代末,电脑技术的普及程度与今日相较,犹如鸿沟天堑。那时,计算机对大多数人来说还是稀罕物,尤其在像中国这样的发展中国家。 与如今充满信息的网络环境相比,那个时代没有Web,没有Google等搜索引擎&am…

Docker安装并配置Pushgateway

Linux下安装Docker请参考:Linux安装Docker 简介 Pushgateway是Prometheus的一个组件,prometheus server默认是通过Exporter主动获取数据(默认采取pull拉取数据),Pushgateway则是通过exporter主动方式推送数据到Pushg…

SQLmap使用

文章目录 利用sqlmap 注入得到cms网站后台管理员账密获取数据库名称获取cms数据库的表名获取users表中的字段(内容)获取username字段和password字段的内容 salmap破解psot请求数据包salmap获取getshell 利用sqlmap 注入得到cms网站后台管理员账密 获取数…

机器人制作开源方案 | 桌面级机械臂--本体说明+驱动及控制

一、本体说明 1. 机械臂整体描述 该桌面级机械臂为模块化设计,包含主机模块1个、转台模块1个、二级摆动模块1个、可编程示教盒1个、2种末端执行器、高清摄像头,以及适配器、组装工具、备用零件等。可将模块快速组合为一个带被动关节的串联3自由度机械臂…

Maven详解

文章目录 一、引言1.1 为什么需要 Maven?1.2 Maven 解决了哪些问题?1.2.1 添加第三方jar包1.2.2 jar包之间的依赖关系1.2.3 处理jar包之间的冲突1.2.4 获取第三方jar包1.2.5 将项目拆分成多个工程模块1.2.6 实现项目的分布式部署 二、介绍三、Maven 的特…

python数组基本使用

使用Numpy进行数组运算 相比 List,NumPy 数组的优势 NumPy 全称为 Numerical Python,是 Python 的一个以矩阵为主的用于科学计算的基础软件包。NumPy 和 Pandas、Matpotlib 经常结合一起使用,所以被人们合称为数据分析三剑客。Numpy 中有功能…

winpe还原windows系统备份

准备工作 用大白菜制作一个启动u盘,里面可以镜系统备份文件 插入电脑,启动,按f11(这个快捷键因电脑而异),选择启动u盘,进入winpe 硬盘格式化 选择分区助手软件 选择硬盘,右键选择【…

【Java 中级】一文精通 Spring MVC - 数据验证(七)

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

算法通关村第8关【黄金】| 寻找祖先问题

思路:递归三部曲 第一步:确定参数和返回值 题目要求找到指定的结点,就需要返回结点。 题目又涉及到p,q就需要传入p,q,需要遍历传入root 第二步:确定终止条件 当遍历到结点为空说明到底没找到返回空 或者遍历到p,…

飞腾平台芯片测试固件(SFW)和开机启动log

一、说两句 最近公司飞腾产品越来越多了,FT-2000/4的D2000的X100的,最近又新出了E2000。越来越多新来的小孩儿开始加入到飞腾的调测试中,那么在他们实际的调试中会遇到很多的问题。在固件启动阶段有的板卡会有一些异常,有时我们需…

ChatGPT 与 Python进行动态可视化分析

Python数据分析目前最为热门的岗位操作。 想使用Python进行可视化分析,但是又不想写代码,测试,验证。可以交给ChatGPT,open AI 来进行操作。 这样的动态图显示,我们只需要给ChatGPT发送一个指令,人工智能就…

用AI + Milvus Cloud搭建着装搭配推荐系统教程

以下函数定义了如何将图像转换为向量并插入到 Milvus Cloud 向量数据库中。代码会循环遍历所有图像。(注意:如果需要开启 Milvus Cloud 全新特性动态 Schema,需要修改代码。) 查询向量数据库 以下代码演示了如何使用输入图像查询 Milvus Cloud 向量数据库,以检索和上传…

新方案unity配表工具

工具下载:网盘链接 工具结构:针对每张表格生成一个表格类,其中默认包含一个list和字典类型参数记录表格数据,初始化项目时将list中的数据转为按id索引的dictionary,用于访问数据。额外包含一个同名Temp后缀的类&#…

docker使用harbor进行镜像仓库管理演示以及部分报错解决

目录 一.安装harbor和docker-compose 1.下载 2.将该文件修改为这样,修改好自己的hostname和port,后文的用户和密码可以不改也可以改,用于登录 3.安装 二.修改daemon.json文件和/etc/hosts文件 三.使用powershell作windows端域名映射 四…

Unity 之transform.LookAt() 调整一个物体的旋转,使其朝向指定的位置

文章目录 总的介绍补充(用于摄像机跟随的场景) 总的介绍 transform.LookAt 是 Unity 引擎中 Transform 组件的一个方法,用于调整一个物体的旋转,使其朝向指定的位置。通常情况下,它被用来使一个物体(如摄像…