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

news2024/9/28 13:28:55

本文参考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 examples

    make -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 = sublib

include(../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.cpp

greaterThan(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

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

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

相关文章

MathType绝对是我数学编辑的首选工具!

去年&#xff0c;微软曾说&#xff0c;要去掉Office里的公式编辑器&#xff0c;建议用户使用MathType编辑公式。目前Office用户可以到微软官网安装MathType的插件&#xff0c;现在免费使用&#xff0c;以后要收费。Word里安装这个插件以后&#xff0c;就会出现MathType的菜单。…

双交叉限幅控制总结

空燃比小于等于1使用下图&#xff1a;空燃比大于1&#xff0c;MAX变MIN&#xff0c;MIN变MAX&#xff0c;高低选互换即可。加负荷&#xff0c;先加空气&#xff0c;后加煤气&#xff0c;降负荷&#xff0c;先降煤气&#xff0c;后降空气。 交叉限幅和双交叉限幅的区别 交叉限幅…

磷酸铁锂电池生产污废水需要哪些工艺及设备

磷酸铁锂电池作为一种常见的锂离子电池&#xff0c;已广泛应用于电动汽车、储能系统等领域。然而&#xff0c;在磷酸铁锂电池的生产过程中&#xff0c;难免会产生一定量的污废水。为了有效处理和处理这些污废水&#xff0c;我们需要合适的工艺和设备。 首先&#xff0c;针对磷酸…

java期末复习题

1.任何一个Java程序都默认引入一个包&#xff0c;这个包的名字是________________。 正确答案&#xff1a;java.lang Java程序默认引入的包是java.lang包。这个包是Java语言的核心&#xff0c;它提供了Java中的基础类&#xff0c;包括基本Object类、Class类、String类、基本类…

react 项目结构配置

1 项目整体目录结构的搭建 如下图&#xff1a; 2 重置css样式: normalize.css reset.less ; 第一步 安装 npm i normalize.css 入口文件index.tsx导入&#xff1a;import ‘noremalize.css’ 第二步 创建自己的css样式&#xff1a;在assets文件夹中创建css…

【MySQL】:掌握SQL中DDL的数据库定义与操作

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. SQL的分类二. DDL数据库操作2.1 查询所有数据库2.2 查询当前数据库2.3 创建数…

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程序设计参考资料 分…

《设计模式的艺术》笔记 - 简单工厂模式

介绍 定义一个工厂类&#xff0c;它可以根据参数的不同返回不同类的实例&#xff0c;被创建的实例通常都具有相同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法&#xff0c;因此简单工厂模式又被称为静态工厂方法模式&#xff0c;属于类创建型模式 实现 class Pr…

实现JavaScript的函数链式执行

本篇文章将会实现函数链式执行&#xff0c;链式步骤延时等操作。 1.工具类 const executor (name) > {/*** 执行器名称*/const executorName name;/*** 方法数组*/const methodArray [];/*** 同步执行某个方法*/function run(func){methodArray.push(func);return this…

谷歌aab包在Android 14闪退而apk没问题(targetsdk 34)

问题原因 Unity应用(target SDK 34)上线到GooglePlay&#xff0c;有用户反馈fold5设备上&#xff08;Android14系统&#xff09;疯狂闪退&#xff0c;经测试&#xff0c;在小米手机Android14系统的版本复现成功了&#xff0c;奇怪的是apk直接安装没问题&#xff0c;而打包成aa…

Android开发基础(二)

Android开发基础&#xff08;二&#xff09; 上篇主要描述了Android系统架构&#xff0c;代码是通过Java表示的&#xff1b; 本篇将从介绍Android组件去理解Android开发&#xff0c;代码将对Java和Kotlin进行对比。 Android组件 Android应用程序由一些零散的有联系的组件组成…

伴鱼离线数仓建设案例

伴鱼数仓建设案例 伴鱼离线数仓建立&#xff0c;与伴鱼的业务一起快速发展&#xff0c;从一条业务线&#xff0c;到多条业务线。在演进的过程中&#xff0c;有很多总结和沉淀的内容。本篇文章主要介绍伴鱼离线数据仓库的发展历史&#xff0c;在发展过程中遇到的各种问题&#…

人工智能ai写作软件哪个好,看看这6款

现如今人工智能AI写作软件逐渐成为写作者们的得力助手。这些软件利用先进的自然语言处理技术&#xff0c;能够帮助用户快速生成高质量的中文文章。在众多中文人工智能AI写作软件中&#xff0c;以下6款软件凭借其独特的优势脱颖而出&#xff0c;为用户提供了高效的写作体验。 软…

NetApp E系列(E-Series)OEM产品介绍以及如何收集日志和保存配置信息

NetApp E系列是NetApp收购LSI存储后建立的一条新的产品线&#xff0c;由于LSI存储的历史悠久&#xff0c;所以这条产品线给NetApp带来了很多的OEM产品&#xff0c;可以说E系列是世界上OEM给最多公司的存储产品线也不为过&#xff0c;因为最早LSI的产品销售测率就是OEM&#xff…

Java 面试题 - 多线程并发篇

线程基础 创建线程有几种方式 继承Thread类 可以创建一个继承自Thread类的子类&#xff0c;并重写其run()方法来定义线程的行为。然后可以通过创建该子类的实例来启动线程。 示例代码&#xff1a; class MyThread extends Thread {public void run() {// 定义线程的行为} …

【C语言】指针知识点笔记(1)

以下的思维导图是胖达学习指针时记得笔记&#xff0c;是根据自己的习惯所记录的&#xff0c;希望能对大家的学习有所帮助&#xff0c;如果大家喜欢的话我后面会陆续更新其他章节的笔记&#xff0c;喜欢的话就评论一下吧&#xff01; 目录 一、内存和地址 二、指针和变量地址…

P122 神经网络压缩Network compression-purning

在 边缘设备上跑时,模型太大,跑不动 、purn: 删减 删减以后,正确率有影响会下降 为解决这个问题,进行微调,每次只减一点参数,重复多次。 使得最后修剪后的模型跟原来的模型差别不大。 判断某一个参数是否重要,是否要去掉 问题:进行过修剪后不规则的网络,pytorch难以…

【惠友骨科小课堂】拇外翻常见的几个误区,来看看你中了几个?

拇外翻作为常见的足部畸形&#xff0c;在日常生活中困扰着许多人。歪脚趾不仅外观不好看&#xff0c;还会出现疼痛、影响行走运动。但大多数人对于拇外翻的认识都不足常常落入认知误区&#xff0c;快来看看你中了几个&#xff1f; 误区一Q 我都没穿过高跟鞋&#xff0c;怎么也…

【工业物联网】现代企业环境中的DCS(分布式控制系统)和SCADA(站点控制和数据采集)...

快答案&#xff1a; SCADA和DCS作为单独的系统开始&#xff0c;但一起成长。今天的带宽如此广泛&#xff0c;不需要在每个节点进行本地化。 SCADA和DCS&#xff1a;如果您参与管理企业级网络&#xff0c;您可能已经听说过这些术语。本文将阐明两种技术之间的区别。请注意&#…

【ACL 2023】 The Art of Prompting Event Detection based on Type Specific Prompts

【ACL 2023】 The Art of Prompting: Event Detection based on Type Specific Prompts 论文&#xff1a;https://aclanthology.org/2023.acl-short.111/ 代码&#xff1a;https://github.com/VT-NLP/Event_APEX Abstract 我们比较了各种形式的提示来表示事件类型&#xff0…