当前位置: 首页 > news >正文

嵌入式linux 编译qt5(以v851s为例)

本文参考Blev大神的博客:Yuzuki Lizard V851S开发板 --移植 QT5.12.9教程(群友Blev提供) - Allwinner / 柚木PI-V851S - 嵌入式开发问答社区 (100ask.net)

一. 环境准备 

1.下载qt5源码:Open Source Development | Open Source License | Qt 或者从v851s sdk 中获取

路径:tina-v853-docker/platform/thirdparty/gui/qt/qt-5.12.9.tar.xz

2. 编译环境:vmware虚拟机安装的ubuntu22.10

3. 交叉编译工具:v851s sdk 中的toolchain

路径:tina-v853-docker/prebuilt/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830

4. ubuntu下需要安装的依赖库:

apt-get install repo git gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler mtools \
parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools linaro-image-tools libssl-dev \
autotools-dev libsigsegv2 m4 libdrm-dev curl sed make binutils build-essential gcc g++ bash \
patch gzip bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libglib2.0-dev \
openssh-client lib32stdc++6 gcc-aarch64-linux-gnu libncurses5-dev lzop libssl1.0.0 libssl-dev \
libglade2-dev cvs mercurial subversion asciidoc w3m dblatex graphviz python-matplotlib \
libc6:i386 texinfo liblz4-tool genext2fs expect autoconf intltool libqt4-dev libgtk2.0-dev

二. 解压qt5源码进行编译

1. 在 ubuntu 的 home/xxx/ 下创建一个qt5 的文件,解压qt5 源码

tar -xvf qt-xxx.tar.xz

2. 将交叉编译工具放到 ubuntu 的home/xxx/  ,采用绝对路径的方式调用交叉编译工具

3. 在qt5 源码根目录下创建 build.sh 写入编译规则 ,并且给权限

touch build.sh
chmod 777 build.sh

在 build.sh 中写入编译规则:

#!/bin/sh
PWD=`pwd`mkdir arm-qt./configure \-prefix $PWD/arm-qt \-release \-opensource \-shared \-xplatform linux-arm-gnueabi-g++ \-optimized-qmake \-pch \-qt-sqlite \-qt-libjpeg \-qt-libpng \-qt-zlib \-no-opengl \-skip qt3d \-skip qtcanvas3d \-skip qtpurchasing \-skip qtlocation \-skip qttools \-no-sse2 \-no-openssl \-no-cups \-no-glib \-no-dbus \-no-xcb \-no-iconv \-no-separate-debug-info \-no-fontconfig \-recheck-all \-make examplesmake -j16 make install

4. 配置交叉编译工具路径,qt5源码根目录下打开文件qmake.conf:

gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

#
# qmake configuration for building with arm-linux-gnueabi-g++
#MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublibinclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)#一定要是你 toolchain 的绝对路径,不要写错
#CROSS_COMPILE=arm-openwrt-linux
#CROSS_COMPILE=/home/navy/v851s/Yuzukilizard/toolchain/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux
CROSS_COMPILE=/home/navy/v851s/Yuzukilizard/toolchain/gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi# modifications to g++.conf
QMAKE_CC                = $${CROSS_COMPILE}-gcc
QMAKE_CXX               = $${CROSS_COMPILE}-g++
QMAKE_LINK              = $${CROSS_COMPILE}-g++
QMAKE_LINK_SHLIB        = $${CROSS_COMPILE}-g++# modifications to linux.conf
QMAKE_AR                = $${CROSS_COMPILE}-ar cqs
QMAKE_OBJCOPY           = $${CROSS_COMPILE}-objcopy
QMAKE_NM                = $${CROSS_COMPILE}-nm -P
QMAKE_STRIP             = $${CROSS_COMPILE}-strip
load(qt_config)

5. 编译并安装产生库文件

  在qt5 源码根目录下执行:

./build.sh

  执行:

make install

  将会在qt5 根目录arm-qt 文件中产生所有的qt5 的库文件,将其下载到嵌入式开发版中即可。

三. 编写qtDemo 进行测试

1. 在 ubuntu home/xxx/ 中创建qtDemo 文件夹,并且创建两个文件helloworld.cpp 和 helloworld.pro 

mkdir qtDemo
touch helloworld.cpp
touch helloworld.pro

在 helloworld.cpp 中写入:

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QSlider>
#include <QHBoxLayout>int main(int argc, char **argv)
{QApplication app(argc, argv);QWidget *window  = new QWidget;window->setWindowTitle("I am a slider");QLabel *label = new QLabel;  // QLabel控件,用于显示数字QSlider *slider = new QSlider(Qt::Horizontal);  // 滑动条slider->setRange(0, 100);QObject::connect(slider, SIGNAL(valueChanged(int)), label, SLOT(setNum(int)));slider->setValue(50);QHBoxLayout *layout = new QHBoxLayout; //level layout->addWidget(label);layout->addWidget(slider);window->setLayout(layout);window->resize(400, 240);window->show();return app.exec();
}

在 helloworld.pro 中写入:

######################################################################
# Automatically generated by qmake (3.1) Fri Jan 12 17:28:28 2024
######################################################################TEMPLATE = app
TARGET = helloworld
INCLUDEPATH += .# The following define makes your compiler warn you if you use any
# feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0# Input
SOURCES += helloworld.cppgreaterThan(QT_MAJOR_VERSION, 4): QT += widgets

2. 通过编译出来的qt5 对demo 进行测试:

在qt源码目录下执行:

arm-qt/bin/qmake -project
arm-qt/bin/qmake
arm-qt/bin/qmake helloworld.cpp

将产生的二进制文件helloworld 下载到嵌入式开发板,给权限,执行./helloworld 即可。

chmod 777 helloworld
./helloworld

 ******* 如果提示库文件出错,请将xxx5.12.9.so 库文件名均改成xxx5.so

相关文章:

嵌入式linux 编译qt5(以v851s为例)

本文参考Blev大神的博客&#xff1a;Yuzuki Lizard V851S开发板 --移植 QT5.12.9教程&#xff08;群友Blev提供&#xff09; - Allwinner / 柚木PI-V851S - 嵌入式开发问答社区 (100ask.net) 一. 环境准备 1.下载qt5源码&#xff1a;Open Source Development | Open Source …...

uniapp 实战 -- app 的自动升级更新(含生成 app 发布页)

uniapp 提供了 App升级中心 uni-upgrade-center &#xff0c;可以便捷实现app 的自动升级更新&#xff0c;具体编码和配置如下&#xff1a; 1. 用户端 – 引入升级中心插件 下载安装插件 uni-upgrade-center - App https://ext.dcloud.net.cn/plugin?id4542 pages.json 中添加…...

微服务http调用其他服务的方法

在对应需要调的服务配置文件加上路径 #审批方案微服务配置 server.port: 9004 upload.path: /alldev/u01/ schedule.cron.countDown: 0 0 8-18 * * ? statistics.syskey: ywsp schedule.countDown.isExecute: true post.url.updateStatus: http://10.3.2.222:8888/ecological…...

vagrant 用户名密码登录

正常登录后 sudo -i 切换到root权限 vim /etc/ssh/vim sshd_config 将PasswordAuthentication no设置 为yes 重启sshd.service服务 systemctl restart sshd.service...

强化学习应用(三):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…...

探索SQL性能优化之道:实用技巧与最佳实践

SQL性能优化可能是每个数据库管理员和开发者在日常工作中必不可少的一个环节。在大数据时代&#xff0c;为确保数据库系统的响应速度和稳定性&#xff0c;掌握一些实用的SQL优化技巧至关重要。 本文将带着开发人员走进SQL性能优化的世界&#xff0c;深入剖析实用技巧和最佳实践…...

Github项目推荐-Insomnia

项目地址 GitHub地址&#xff1a;GitHub - Kong/insomnia 官网&#xff1a;The Collaborative API Development Platform - Insomnia 项目简述 想必大家都知道PostMan吧。Insomnia可以说是PostMan的开源平替。页面ui很不错&#xff0c;功能强大&#xff0c;使用也比较方便。…...

python 语法

闭包 在函数嵌套的前提下&#xff0c;内部函数使用了外部函数的变量&#xff0c;并且外部函数返回了内部函数&#xff0c;我们把这个使用外部函数变量的内部函数称为闭包。 def outfunc(arg):def innerFunc(msg):print(f"<{msg}> {arg} <{msg}>")retu…...

Mac下载Navicat premium提示文件损坏的解决方案

引用&#xff1a;https://blog.csdn.net/weixin_44898291/article/details/120879508 sudo xattr -r -d com.apple.quarantine...

算法——贪心法(Greedy)

贪心法 把整个问题分解成多个步骤&#xff0c;在每个步骤都选取当前步骤的最优方案&#xff0c;直到所有步骤结束&#xff1b;在每一步都不考虑对后续步骤的影响&#xff0c;在后续步骤中也不再回头改变前面的选择。不足之处&#xff1a; 贪心算法并不能保证获得全局最优解&…...

VmWare虚拟机的安装

VmWare官方最新版下载地址 vmware官方下载地址 安装流程 安装成功验证 安装完成之后&#xff0c;打开网络中心&#xff0c;一定要确认这里多出两个网络连接&#xff0c;才证明Vmware已经安装成功...

Vue.js轻量级框架:快速搭建可扩展的管理系统

一、前言 在项目实战开发中&#xff0c;尤其是大平台系统的搭建&#xff0c;针对不同业务场景&#xff0c;需要为用户多次编写用于录入、修改、展示操作的相应表单页面。一旦表单需求过多&#xff0c;对于开发人员来说&#xff0c;算是一种重复开发&#xff0c;甚至是繁杂的工作…...

Android-多线程

线程是进程中可独立执行的最小单位&#xff0c;也是 CPU 资源&#xff08;时间片&#xff09;分配的基本单位&#xff0c;同一个进程中的线程可以共享进程中的资源&#xff0c;如内存空间和文件句柄。线程有一些基本的属性&#xff0c;如id、name、以及priority。 id&#xff1…...

sqlalchemy 监听所有实体插入以及更新事件

这边使用的是flaskdependency-injectersqlalchemy&#xff0c;有一个公共类&#xff0c;想插入或者更新的时候对公共类某些字段进行统一操作 这个是公共类&#xff1a;包括一些基础字段&#xff0c;所有的实体都会继承这个类 """Models module.""&q…...

go怎么结束很多个协程呢

在Go语言中&#xff0c;可以通过使用context来结束多个协程。context包提供了用于跟踪、取消和传递截止日期的机制&#xff0c;可用于协程的生命周期管理。 以下是一个使用context取消多个协程的示例&#xff1a; package mainimport ("context""fmt"&qu…...

springboot 项目访问静态资源遇到的问题,WebMvcConfigurer和WebMvcConfigurationSupport

之前发过通过继承WebMvcConfigurationSupport来访问静态资源的文章——img标签访问静态资源&#xff0c;代码如下 Configuration public class LocalPathWebMvcConfigurer extends WebMvcConfigurationSupport {/*** 在springboot项目中&#xff0c;允许浏览器访问指定本地文件…...

Nginx配置负载均衡实例

Nginx配置反向代理实例二 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 负载均衡实例实现的效果 浏览器地址栏输入地址http://192.168.0.101/test/a.html&#xff0c;刷新页面进行多次请求&#xff0c;负载均衡效果&#xff0c;平均分配到8080端口服务和8…...

【算法题】50. Pow(x, n)

题目 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a; 输入&#xff1a;x 2.10000, n 3 输出&#xff1a;9.…...

K8S动态PV

pv和pvc存储卷 存储卷&#xff1a; emptyDir容器内部&#xff0c;随着pod销毁&#xff0c;emptyDir也会消失&#xff0c;不能做数据持久化 hostPath&#xff1a;持久化存储数据&#xff0c;可以和节点上目录做挂载。pod被销毁了数据还在 NFS&#xff1a;一台机器&#xff0…...

逆变器2(原理框图)

总流程 输入&#xff08;低压直流24Vdc&#xff09;——升压&#xff08;DC—DC&#xff09;&#xff08;高压直流369Vdc&#xff09; ——逆变&#xff08;DC—AC&#xff09;&#xff08;交流220V&#xff09; 升压电路&#xff1a;BOOST电路、LLC电路、推挽电路 逆变器过程…...

ERA5合集,使用ERA5得到GNSS站点的温度,气压,水汽压,Tm和PWV合集,可以求五个参数

0. 码字不易&#xff0c;点赞加关注&#xff08;公众号&#xff1a;WZZHHH&#xff0c;部分资料在公众号可以下载&#xff09;&#xff0c;使用请注明出处&#xff08;根据我的研究方向&#xff0c;我会不断更新代码&#xff09;。 1.计算PWV的方法一般采用有三种&#xff0c; …...

c#让三个线程按照顺序执行

现实的例子 三个线程都是while&#xff08;true&#xff09;的循环体 A线程&#xff1a;采集数据 B线程&#xff1a;画曲线 C线程&#xff1a;存数据库 AutoResetEvent类 AutoResetEvent 是一个线程同步的类&#xff0c;它提供了一种机制&#xff0c;允许一个或多个线程等待直…...

AWS Directory Service 开启ldaps

启用客户端 LDAPS 要启用客户端 LDAPS&#xff0c;您需要将证书颁发机构&#xff08;CA&#xff09;证书导入 AWS Managed Microsoft AD&#xff0c;然后在目录上启用 LDAPS。启用后&#xff0c;AWS 应用程序与您自行管理的 Active Directory 之间的所有 LDAP 通信将通过安全套…...

Seata 以 Nacos 为注册中心启动

Seata 以 Nacos 为注册中心启动 修改 conf 下的 application.yml 配置 server:port: 7091spring:application:name: seata-serverlogging:config: classpath:logback-spring.xmlfile:path: ${user.home}/logs/seataextend:logstash-appender:destination: 127.0.0.1:4560kafk…...

Unity填坑-灯光烘焙相关

Unity填坑-灯光烘焙相关 文章目录 Unity填坑-灯光烘焙相关前言一、Light的模式二、光的效果分类三、各种Light模式与烘焙的说明1.Realtime,实时光2.baked,烘焙光3.mixed,混合 四、实时全局光五、其他说明1.动态物体的全局光照效果2.手机使用烘焙注意的点3.其他设置 前言 项目组…...

【python】TCP测速程序

一、服务端 下面是一个简单的 Python 服务端程序的示例&#xff0c;使用标准库中的 socket 模块来建立一个 TCP 服务器。该服务器接收客户端的连接请求&#xff0c;客户端发送一定大小的数据流以测试 TCP 带宽。 实际场景中带宽测试可能需要更复杂的逻辑来确保测试的准确性。 …...

新书速览|从零开始大模型开发与微调:基于PyTorch与ChatGLM

详细讲解大模型基本理论、算法、程序实现与应用实战&#xff0c;揭示大模型开发与微调技术 1 本书内容 大模型是深度学习自然语言处理皇冠上的一颗明珠&#xff0c;也是当前AI和NLP研究与产业中最重要的方向之一。本书使用PyTorch 2.0作为学习大模型的基本框架&#xff0c;以C…...

边缘计算:连接实时数据的力量与未来发展之路

边缘计算是一种分布式计算范式&#xff0c;它旨在将数据处理、存储和应用服务带到数据源的近端&#xff0c;即网络的“边缘”。在边缘计算模型中&#xff0c;算力和存储资源距离末端用户或数据源更近&#xff0c;这减少了数据在网络中传输的距离&#xff0c;从而降低延迟&#…...

ZooKeeper 实战(四) Curator Watch事件监听

文章目录 ZooKeeper 实战(四) Curator Watch事件监听0.前言1.Watch 事件监听概念2.NodeCache2.1.全参构造器参数2.2.代码DEMO2.3.日志输出 3.PathChildrenCache3.1.全参构造器参数3.2.子节点监听时间类型3.2.代码DEMO 4.TreeCache4.1.构造器参数4.2.代码DEMO4.3.日志输出 ZooKe…...

Spring Boot 构建工具插件

本文为官方文档直译版本。原文链接 Spring Boot 构建工具插件 引言Spring Boot Maven PluginSpring Boot Gradle PluginSpring Boot AntLib 模块Spring Boot Ant 任务使用 "exejar" 任务示例 使用 "findmainclass" 任务例子 支持其它构建系统重新包装档案嵌…...

应用开发需要学什么/百度seo排名优化提高流量

比如表namecountA10B5C20D60E80F2G7H3共8条记录name保证唯一现在要查询count的TOP5&#xff0c;以及剩下3条的总和&#xff1a;namecountE80D60C20A10G7其它 10MySQLselect * from (select * from 比如表 order bycountdesc limit 5) t union all select 其它,sum(count) from …...

北京网站建设 降龙网/个人博客登录首页

github:https://github.com/zhoushengmufc/iosselect webapp模仿ios下拉菜单 html下拉菜单select在安卓和IOS下表现不一样&#xff0c;iosselect正是为统一下拉菜单样式而生 我们以IOS下select的交互和样式为蓝本&#xff0c;开发了这一组件 先看效果&#xff1a; 特点 可以做到…...

公司网站招聘板块怎么做/如何快速推广网上国网

无法挂载&#xff0c;提示 unsafe state的时候&#xff0c;请使用 sudo nftsfix dev/sdc5 #这个参数看报错信息来确定安装chrome无法打开网页或者无法启动的时候&#xff0c;在命令行中启动程序&#xff0c;输入网址&#xff0c;观察报错信息搜素解决方案 转载于:https://www…...

安徽奶茶加盟网站建设/谷歌竞价排名推广公司

一、写文件 #include <fstream> ofstream ofs;//创建流对象 ofs.open(path&#xff0c;打开方式);//指定路径和打开方式 //打开方式&#xff1a; // ios::in 读文件打开 // ios::out 写文件打开 // ios::ate 从文件尾打开 // ios::app 追加方式打开 // ios::trunc 如已有…...

10000ip网站怎么做/广告推广代运营公司

和新队友的第一次训练 体验良好 debug到头秃 好困啊靠 A.The Baguette Master 给一个四边形相框的宽度和边框内侧四条边对角线AD的程度&#xff0c;求外侧周长 如图&#xff0c;对四个点做垂线&#xff08;因为懒所以只挑了两个角来做&#xff09;&#xff0c;将总长度分为…...

做网站需要什么条件/南宁网络推广外包

Vsftpd安装详细文档需求&#xff1a;a.匿名用户不可以登录和访问ftp服务器&#xff08;因为是运维部内部的ftp服务器&#xff0c;所以只有运维部的同事才可以登录&#xff09;&#xff0c;即只允许本地用户登录。b.ftp服务器默认是用户登录到各自的家目录下&#xff0c;要求是所…...