Yuzuki Lizard 全志V851S开发板 –移植 QT5.12.9教程

news2024/11/15 15:36:31
  • 本文转载自:https://forums.100ask.net/t/topic/3027

移植 QT5 教程 (此教程基于docker版V851S开发环境)

docker pull registry.cn-hangzhou.aliyuncs.com/gloomyghost/yuzukilizard

编译依赖

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

安装第一遍会有报错,部分无法执行。在执行一遍,就可以了。

1.建议新建一个docker避免环境污染的问题。

2.打开下面目录

/root/tina-v853-docker/platform/thirdparty/gui/qt/

并解压

tar -xvf qt-5.12.9.tar.xz

在这里插入图片描述

3.导入编译工具链

3.1 新建tool文件夹

mkdir /root/tool

3.2 将toolchain.tar解压到tool文件夹下面

cd /root/tool/
tar -xvf toolchain.tar

在这里插入图片描述

4.source 编译工具链

4.1 修改profile

vi /etc/profile

增加一行代码

export PATH=$PATH:/root/tool/toolchain/bin

4.2 增加环境变量

nano /root/.bashrc

增加二行代码

export PATH=$PATH:/root/tool/toolchain/bin
export STAGING_DIR=$STAGING_DIR:/root/tool/toolchain/bin

5.qt解压完成后,进入文件夹

cd /root/tina-v853-docker/platform/thirdparty/gui/qt/qt-5.12.9/

在当前文件夹里面创建一个.sh文件
执行

touch make.sh
chmod 777 make.sh
nano make.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

这里面比较复杂,里面开启和关闭部分项目是为了保证编译可以成功。

如果需要编译复杂的QT可以自己测试。

6.将工具链改为自己的

执行:

nano /root/tina-v853-docker/platform/thirdparty/gui/qt/qt-5.12.9/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)

CROSS_COMPILE=arm-openwrt-linux

# 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)

7.编译QT5

执行:

cd /root/tina-v853-docker/platform/thirdparty/gui/qt/qt-5.12.9/

执行:

./make.sh

8.安装

如果没有报错,就编译完成了。

make install

9.下载build文件

执行:

tar -cvf arm-qt.tar arm-qt

压缩包压缩好,就可以通过ftp下载下来了。

10.编译qtdemo

10.1 编译qtdemo
创建一个文件夹helloworld,然后再文件夹里面创建一个文件 main.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();
}

10.2 编译
执行:

/root/tina-v853-docker/platform/thirdparty/gui/qt/qt-5.12.9/arm-qt/bin/qmake -project

执行:

/root/tina-v853-docker/platform/thirdparty/gui/qt/qt-5.12.9/arm-qt/bin/qmake

执行:

make

此时会提示报错:修改.pro结尾的文件,末尾增加一行代码。

参考这个代码

######################################################################
# Automatically generated by qmake (3.1) Sun Apr 2 23:32:59 2023
######################################################################

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 += hello.cpp



greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

并重新执行一遍

10.3 下载可执行文件 helloworld

11.导入

/root/tina-v853-docker/platform/thirdparty/gui/qt/qt-5.12.9/arm-qt/bin

下面的两个文件夹到板子上,其余的不用

复制bin下面的lib 到usr/lib 并根据报错相应的修改文件名
复制bin下面的plugin到usr目录下面
复制刚才的可执行文件helloworld 到/mnt

12.进入板子/mnt

添加权限 chmod 777 helloworld
执行

./helloworld

13.此时会报错,要修改文件名

凡是涉及到5.12.9.so的文件名,全部要改成5.so 否则会报错
(如何快速改文件名呢?)
其中包含名字为core,gui,widget的,一定要改

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

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

相关文章

用户订阅付费如何拆解分析?看这篇就够了

会员制的订阅付费在影音娱乐行业中已相当普及&#xff0c;近几年&#xff0c;不少游戏厂商也开始尝试订阅收费模式。在分析具体的用户订阅偏好以及订阅付费模式带来的增长效果时&#xff0c;我们常常会有这些疑问&#xff1a; 如何从用户的整体付费行为中具体拆解订阅付费事件…

Numpy从入门到精通——数组变形|合并数组

这个专栏名为《Numpy从入门到精通》&#xff0c;顾名思义&#xff0c;是记录自己学习numpy的学习过程&#xff0c;也方便自己之后复盘&#xff01;为深度学习的进一步学习奠定基础&#xff01;希望能给大家带来帮助&#xff0c;爱睡觉的咋祝您生活愉快&#xff01; 这一篇介绍《…

SLAM论文速递:SLAM—— 流融合:基于光流的动态稠密RGB-D SLAM—4.25(2)

论文信息 题目&#xff1a; FlowFusion:Dynamic Dense RGB-D SLAM Based on Optical Flow 流融合:基于光流的动态稠密RGB-D SLAM论文地址&#xff1a; https://arxiv.org/pdf/2003.05102.pdf发表期刊&#xff1a; 2020 IEEE International Conference on Robotics and Automa…

【Spring Cloud】Spring Cloud 是什么?

文章目录 前言一、子项目二、常用组件三、把 Spring Cloud 官方、Netflix、Alibaba 三者整理成如下表格&#xff1a; 前言 Spring 以 Bean&#xff08;对象&#xff09; 为中心&#xff0c;提供 IOC、AOP 等功能。Spring Boot 以 Application&#xff08;应用&#xff09; 为中…

Python小姿势 - Python操作Excel表格数据

Python操作Excel表格数据 在日常工作中&#xff0c;我们经常会遇到一些需要对表格数据进行处理的情况&#xff0c;比如&#xff1a;数据清洗、数据分析、数据可视化等。对于这些任务&#xff0c;我们可以使用Python来进行操作。 在Python中操作Excel表格数据&#xff0c;我们可…

electron+vue3全家桶+vite项目搭建【13】封装加载进度显示,新建窗口 演示主进程与渲染进程通信

文章目录 引入实现效果演示&#xff1a;1.封装新建窗口工具2.测试新建窗口3.封装进度条加载4.测试进度条加载 引入 这里我们通过封装electron的工具类来演示electron中的主进程和渲染进程利用ipc进行通信 demo项目地址 electron官方文档ipc通信 实现效果演示&#xff1a; …

通过注册表设置远程桌面的配置

***************************修改远程终端端口号*************************** [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\Wds\rdpwd\Tds\tcp] "PortNumber"dword:00000d3d [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Ser…

代码优雅之道——如何干掉过多的if else

1、前言 注意标题是过多的&#xff0c;所以三四个就没必要干掉了。实际开发中我们经常遇到判断条件很多的情况&#xff0c;比如下图有20多种情况&#xff0c;不用想肯定是要优化代码的&#xff0c;需要思考的是如何去优化&#xff1f; 网上很多说用switch case啊&#xff0c;首…

算法刷题|198.打家劫舍、213.打家劫舍Ⅱ、337.打家劫舍Ⅲ

打家劫舍 题目&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定…

【社区图书馆】Fundamentals Of Computer Graphics——The beginning of computer graphics

目录 English 中文 English "Fundamentals Of Computer Graphics" is a classic textbook on computer graphics, also known as the "Tiger Book". It is considered one of the best introductory texts in the field of computer graphics. The book …

1分钟搭建自己的GPT网站

如果觉得官方免费的gpt&#xff08;3.5&#xff09;体验比较差&#xff0c;总是断开&#xff0c;或者不会fanqiang&#xff0c;那你可以自己搭建一个。但前提是你得有gpt apikey。年初注册的还有18美金的额度&#xff0c;4.1号后注册的就没有额度了。不过也可以自己充值。 有了…

【Redis】Redis事务

介绍 可以一次执行多个命令&#xff0c;本质是一组命令的集合。一个事务中的所有命令都会序列化&#xff0c; 按顺序地串行化执行而不会被其他命令插入一个队列中&#xff0c;一次性、顺序性、排他性的执行一系列命令没有隔离级别的概念&#xff0c;没有脏读、不可重复读等。 …

思维导图从入门到大神

思维导图怎么做&#xff1f;思维导图是一种发散性思维的图。在我们生活的方方面面都有运用。无论是工作、学习、还是生活&#xff0c;我们都可以用到它。那思维导图是怎么绘制的呢&#xff1f;其实非常简单&#xff0c;只要这简单的几步 1、首先在绘制思维导图前&#xff0c;我…

veImageX 演进之路:iOS 高性能图片加载 SDK

动手点关注 干货不迷路 1. SDK简介 图片在业务应用场景是一个常见的元素&#xff0c;veImageX&#xff08;简称ImageX&#xff09;为业务提供了灵活、高效的一站式图片处理解决方案&#xff0c;包括了服务端 SDK、上传 SDK 和客户端图片加载 SDK。本文就来介绍下 iOS 客户端图…

力扣 1493(删掉一个元素以后全为 1 的最长子数组)Java

目录 题目 约束 用例 解题思路 各位看官先看执行结果 这道题呢&#xff0c;采用的滑动窗口思想。 题目 给你一个二进制数组 nums &#xff0c;你需要从中删掉一个元素。 请你在删掉元素的结果数组中&#xff0c;返回最长的且只包含 1 的非空子数组的长度。 如果不存在…

15天学习MySQL计划-索引(进阶篇)第七天

索引 1.索引概述 1.介绍 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数…

HTTP1.1(十二)Cookie的格式与约束

一 Cookie的格式与约束 ① Cookies是什么 1) cookie是我们在前端编程中经常使用的概念2) 使用cookie利用浏览器帮助我们保存客户的相关状态信息,保存用户已经做了什么事情3) 重点和难点[1]、cookie的工作原理[2]、cookie的限制是什么[3]、session又是怎样与cookie关联起来 …

【Android Framework (七) 】- ActivityManagerService(AMS)

文章目录 知识回顾启动第一个流程initZygote的流程system_serverServiceManagerBinderLauncher的启动 前言源码分析1.AMS的启动. ActivityManagerService.java2.setSystemProcess3.应用进程的初始化4.Activity的启动流程 拓展知识1.介绍一下Activity的启动流程。2.ActivityMana…

Handbook of MusicPsychology 音乐心理学手册 ( 多纳德·霍杰斯 Donald.A.Hodges) 笔记

由两个以上的音组成的结合音&#xff0c;除了该声波的波形&#xff0c;人耳会另外脑补出不存在的波形 频率相距较远的一些音与频率相距较近的一些音&#xff0c;前者累加的响度比后者要大 除了泛音部分&#xff0c;音的起声部分也是音色辨别的关键 音高、响度、音色、时值&a…

托福高频真词List07 // 附托福TPO阅读真题

目录 ​ 4月24日单词 生词 熟词 4月25日真题 4月24日单词 生词 &#x1f361;live in strictly aquatic habitat / əˈkwɑːtɪk / &#x1f361;only live in aquatic environment 只生活在水生环境中 readilyquickly readilyeasily adv 迅速地 adv 轻易地 wide…