如何在ubuntu交叉编译qt5程序发布到rk3568 Linux开发板运行?

2023-11-13

如何在ubuntu交叉编译qt5程序发布到rk3568 Linux开发板运行?

本文将介绍如何在ubuntu搭建qt的开发环境和第一个helloworld程序的创建、构建过程。

1.下载安装交叉编译工具

拷贝 rk3568_linux/prebuilts/gcc/linux-x86/ 到 /opt/aarch64-none-linux-gnu/

2.qt开发环境的搭建

2.1.下载 qt-everywhere-opensource-src-5.15.8.tar.xz 源码到ubuntu解压。

链接:https://download.qt.io/archive/qt/5.15/5.15.8/

2.2.编译qt-everywhere-opensource-src-5.15.8 源码

新建make.sh

#!/bin/sh
PWD=`pwd`
mkdir install
./configure \
-confirm-license \
-prefix  $PWD/install \
-release \
-opensource \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake -pch \
-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-iconv \
-tslib \
-linuxfb \
-I /home/rockchip/qt-everywhere-opensource-src-5.15.8/install \
-L /home/rockchip/qt-everywhere-opensource-src-5.15.8/install/lib  \
-recheck-all \
-make examples

make -j20
make install

新建env.sh

export PATH=/opt/aarch64-none-linux-gnu/bin/:$PATH
export PATH=$PATH:/home/rockchip/qt-everywhere-opensource-src-5.15.8/install/bin
declare -x ARCH="arm"
declare -x CROSS_COMPILE="arm-none-linux-gnueabihf-"

修改 ./qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf 的 g++.conf 和 linux.conf 交叉编译配置。

#
# qmake configuration for building with aarch64-linux-gnu-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)

# modifications to g++.conf
QMAKE_CC                = aarch64-rockchip1031-linux-gnu-gcc
QMAKE_CXX               = aarch64-rockchip1031-linux-gnu-g++
QMAKE_LINK              = aarch64-rockchip1031-linux-gnu-g++
QMAKE_LINK_SHLIB        = aarch64-rockchip1031-linux-gnu-g++

# modifications to linux.conf
QMAKE_AR                = aarch64-rockchip1031-linux-gnu-ar cqs
QMAKE_OBJCOPY           = aarch64-rockchip1031-linux-gnu-objcopy
QMAKE_NM                = aarch64-rockchip1031-linux-gnu-nm -P
QMAKE_STRIP             = aarch64-rockchip1031-linux-gnu-strip
load(qt_config)

编译:

source env.sh
./make.sh

执行完后在 “qt-everywhere-opensource-src-5.15.8/install/bin/” 目录下就编译安装好了qmake,待下面使用。

3.helloworld程序的创建

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

qhelloworld.pro

#-------------------------------------------------
#
# Project created by QtCreator 2023-06-29T16:20:46
#
#-------------------------------------------------

QT  += widgets

TARGET = helloworld
TEMPLATE = app

INCLUDEPATH +=$$PWD main

SOURCES += \
        $$PWD/main.cpp \
        $$PWD/mainwindow.cpp

HEADERS += \
        $$PWD/mainwindow.h

FORMS += \
        $$PWD/mainwindow.ui

4.helloworld的构建过程

使用上面qt源码编译安装的qmake工具来编译

qmake qhelloworld.pro
# qmake成功后会在当前目录下会生成一个makefile
make

make完成后即可在当前目录下生成 “TARGET = helloworld” 这个可执行文件,然后发布到开发板即可。

5.发布helloworld程序到嵌入式开发板

可通过sd卡、u盘、ssh等方法拷贝传输到开发板。

chmod +x helloworld
./helloworld

以上5个流程下来即可完成我们想要的第一个helloworld程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在ubuntu交叉编译qt5程序发布到rk3568 Linux开发板运行? 的相关文章

  • bash 将输出重定向到文件,但结果不完整

    重定向命令输出的问题已经被问过很多次了 但是我有一个奇怪的行为 我使用的是 bash shell debian 版本 4 3 30 1 release 并尝试将输出重定向到文件 但并非所有内容都记录在文件中 我尝试运行的 bin 文件是 l
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 覆盖 QWebView 中的页面回复

    我试图在 Qt 的 QWebView 中拦截页面 表单请求 并在某些情况下使用替代内容进行响应 QNetworkReply ngcBrowser createRequest Operation operation const QNetwor
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • Crontab 每 5 分钟一次 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我如何告诉 crontab 每 5 分钟运行一次 但从每小时的第二分钟开始 换句话说 我想在以下时间执行我的脚本minute 5 2 例如 我的脚本应
  • 如何并行执行4个shell脚本,我不能使用GNU并行?

    我有4个shell脚本dog sh bird sh cow sh和fox sh 每个文件使用 xargs 并行执行 4 个 wget 来派生一个单独的进程 现在我希望这些脚本本身能够并行执行 由于某些我不知道的可移植性原因 我无法使用 GN
  • 更改启动 Java 运行时后 IntelliJ IDEA 无法在 Ubuntu 上启动

    之前 我的 IntelliJ 运行得很好 但我使用的是 java 6 所以我的项目无法使用 gradle 运行 我用命令将java切换到版本8sudo update alternatives config java 我检查了java ver
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记

随机推荐

  • Linux指令学习(CentOs6.5)tail指令

    本文转载至 CentOS里tail命令详解 tail 名称 tail output the last part of files 输出文件最后的那部分内容 功能描述 tail命令从指定点开始将文件写到标准输出 使用 f选项可以方便的查阅正在
  • 基于YOLOv7的室内场景智能识别系统(源码&教程)

    1 项目背景 近年来 随着移动互联网与定位技术的发展 基于位置服务越来越多地出现在人们的日常生活中 虽然智能手机都包含很多基于位置服务的应用 但是传统的基于位置服务常常将服务范围划分为室内与室外两种场景 室内外无缝定位系统是人们关注及研究的
  • STM32CubeMX配置GPIO外部中断

    前言 用PA0来检测按键的输入信号 当按键按下时会由低电平变为高电平 1 配置RCC时钟 将RCC的High Speed Clock HSE 配置为Crystal Ceramic Resonator 将主频设置为72MHz 2 配置GPIO
  • 将Qt、OpenGL、GLSL以及Qt的Graphics-View框架组合

    将Qt OpenGL GLSL以及Qt的Graphics View框架结合 将Qt OpenGL GLSL以及Qt的Graphics View框架结合 九月份都快过去了 学生们也都开学了 我想校园也会热闹许多吧 在希赛上也相应地热闹了一些
  • nginx--启动脚本

    bin bash Use Startup script for the nginx HTTP Server Definition Global environment variable IFS t n unset f unalias una
  • 瞎玩物联网系列--Hello 树莓派

    条件 Raspberry Pi 3b 32G存储卡 mac 网线 面包板 led灯 杜邦线 传感器若干 系统安装 各种下载 官方镜像下载 树莓派实验室地址 刻录工具 etcher Microsoft Remote Desktop for M
  • 二叉搜索树的定义、查找、插入和删除

    二叉搜索树的定义 查找 插入和删除 原创 2016年07月21日 21 59 00 二叉搜索树的定义 二叉搜索树 也称有序二叉树 排序二叉树 是指一棵空树或者具有下列性质的二叉树 1 若任意节点的左子树不空 则左子树上所有结点的值均小于它的
  • 不用swap分区,用交换文件(转)

    不用swap分区 用交换文件 转 more 安装linux时 一般系统都要求划分一个分区作为交换分区 但现时大家的电脑内存一般都很大 系统交换文件的机会会越来越少 就以我的来说 本人安装的是redhat linux V7 3 内存是256M
  • BGP距离协议①

    边界网关协议 边界网关协议分为内部网关协议和外部网关协议 IGP 内部网关协议 RIP OSPF EGP 外部网关协议 BGP AS自治系统 由单一的机构 组织所管理的一系列IP网络及设备所构成的集合 使用AS自治系统来划分内部和外部网关协
  • 数据库原理 具有检查点的恢复技术

    1 为什么需要检查点 搜索整个日志文件需要耗费的时间很多 重做处理 重新执行 耗费了大量的时间 2 解决方案是什么 在日志文件中增加检查点 check point 记录 增加重新开始文件 恢复子系统在登录日志文件期间动态的维护日志 3 检查
  • CPU测试相关工具搜集

    CPU测试相关工具搜集 一 y cruncher CPU性能测试工具 二 CPU Z CPU参数查看工具 三 cachesize 读取CPU Cache信息 四 Flops CPU浮点运算性能测试工具 五 Open Hardware Mon
  • IDEA找不到Maven窗口

    有时候导入项目或者创建项目时候Maven窗口找不到了 然后指定项目的pom xml文件
  • 缘结西安

    2021年6月1日上午 CSDN创始人 董事长蒋涛 首席运营官钟晖 副总裁李超 长沙首席技术官陈玉龙 高校俱乐部负责人张建龙 市场总监段思倍等到达西安思源学院 与学校就校企合作达成共识 正式结为校企战略合作伙伴 下午 CSDN董事长蒋涛以
  • C++基础——拷贝构造函数

    前言 在上篇文章中 我简单介绍了一下类的两大特殊函数 构造函数和析构函数 构造函数主要用来进行对象的成员变量初始化操作 而析构函数主要用来对战斗后的战场做清理工作 当我们不写这些函数时 编译器会自动生成默认的构造与析构函数 帮助我们合理的运
  • 数据挖掘:探索性数据分析(EDA)

    数据挖掘 探索性数据分析 EDA 一 什么是探索性数据分析 EDA Exploratory Data Analysis 即对数据进行探索性的分析 充分了解数据 为之后的数据清洗和特征工程等提供想法和结论 在探索分析时 也可进行数据清洗的工作
  • 二维字符数组中字符串查找

    首先输入一个数字N 接着输入N行字符 每个字符用逗号分隔 最终形成一个N N的字符数组 然后再输入一个待查找的目标字符串 在上面字符数组中查找是否出现目标字符串 查找的规则是在起始位置 从左向右 或者 从上向下 每个单元格的字符只出现一次
  • 百度网盘 文件名中(文件)含有敏感词

    百度网盘 文件名中含有敏感词 CreateTime 2018年5月3日08 17 58 Author Marydon 1 情景还原 2 解决方案 新建一个文件夹 gt 分享 分享成功 再将真正要分享的文件移动到已经分享的文件夹下 即可 测试
  • 【WSN通信】能量均衡的无线传感器网络非均匀分簇路由协议附matlab代码

    1 简介 提出了一种能量高效均衡 非均匀分簇和簇间多跳路由有机结合的无线传感器网络分布式分簇路由协议DEBUC distributed energy balanced unequal clustering routing protocol
  • 软考考试多少分算通过?

    软考证书取得需要达到总分45分 每门科目满分为75分 因此 不要小看45分 在考试中获得这个分数并不容易 此外 软考要求一次性通过 如果没有通过 成绩将不被保留 因此 必须在一次考试中成功通过所有科目 否则就需要重新参加考试 如果考生只通过
  • 如何在ubuntu交叉编译qt5程序发布到rk3568 Linux开发板运行?

    如何在ubuntu交叉编译qt5程序发布到rk3568 Linux开发板运行 本文将介绍如何在ubuntu搭建qt的开发环境和第一个helloworld程序的创建 构建过程 1 下载安装交叉编译工具 拷贝 rk3568 linux preb