Qt5.9.9交叉编译(带sqlite3、OpenSSL)

1、交叉编译工具链

      这里ARM平台是ARM CortexA9的,一般交叉编译工具链demo板厂商都会提供,若未提供或想更换新版本的交叉编译工具链可参考以下方式获取。

1.1 下载适用于ARM CortexA9的交叉编译工具链

Linaro Releases下载gcc4的最新版xxxx-i686_arm-linux-gnueabihf.tar.xz

1.2 配置交叉编译工具链

1.2.1 解压下载好的工具链包

$ tar xvf gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.xz

1.2.2 部署并配置工具链

拷贝到系统路径

$ sudo mv gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf /usr/local/arm-linux-gnueabihf

配置环境变量

$ vim ~/.bashrc在文件末加入环境变量
export PATH=/usr/local/arm-linux-gnueabihf/bin:$PATH使环境变量生效
$ source ~/.bashrc

检验工具链是否正常使用

$ arm-linux-gnueabihf-gcc -v使用内建 specs。
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/usr/local/arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.4/lto-wrapper
目标:arm-linux-gnueabihf
配置为:/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/snapshots/gcc-linaro-4.9-2017.01/configure SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-objc-gc --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=hard --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --with-fpu=vfpv3-d16 --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/sysroots/arm-linux-gnueabihf --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu/arm-linux-gnueabihf/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu
线程模型:posix
gcc 版本 4.9.4 (Linaro GCC 4.9-2017.01)

 2、SQLite交叉编译

    在后面交叉编译Qt源码的时候会用到

2.1 SQLite源码获取

SQLite Download Page下载最新版sqlite-autoconf-xxxx.tar.gz SQLite源码

2.2 交叉编码

解压源码
$ tar -xvf sqlite-autoconf-3360000.tar.gz到源码路径
$ cd sqlite-autoconf-3360000/配置编译
$ ./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux --prefix=/opt/arm_sqlite构建
$ make安装
$ sudo make install

 3、OpenSSL交叉编译

    Qt使用SSL时需用到OpenSSL库。

3.1 下载OpenSSL源码

Releases · openssl/openssl · GitHub下载OpenSSL_1_x_x最新版的,因为Qt5.9只支持OpenSSL_1的环境,这里下载OpenSSL_1_1_1k 

3.2 交叉编译

解压
@ tar -xvf openssl-OpenSSL_1_1_1k.tar.gz进入到源码路径
@ cd openssl-OpenSSL_1_1_1k/配置为静态编译,注意这里的/home/xxx是当前用户路径,xxx代表当前用户名
@ ./config -fPIC no-shared no-asm --prefix=/home/xxx/arm_openssl --cross-compile-prefix=arm-linux-gnueabihf-修改Makefile
@ vim Makefile搜索并将-m64删除编译
@ make -j4安装
@ make install

4、Qt交叉编译

4.1 下载Qt5.9.9源码

https://download.qt.io/archive/qt/5.9/5.9.9/single/下载Qt5.9.9源码

4.2 配置编译
 

解压qt源码包
$ tar xvf qt-everywhere-opensource-src-5.9.9.tar.xz进入到源码目录
$ cd qt-everywhere-opensource-src-5.9.9

4.2.1 配置qtbase/mkspecs/qmake.conf文件

#
# qmake configuration for building with arm-linux-gnueabihf-g++
#MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublibQT_QPA_DEFAULT_PLATFORM = linuxfb #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-ainclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)QMAKE_INCDIR += /opt/arm_sqlite/include   #已编译的sqlite头文件路径
QMAKE_LIBDIR += /opt/arm_sqlite/lib       #已编译的sqlite库路径QMAKE_INCDIR += /home/wzl/arm_openssl/include   #已编译的openssl头文件路径
QMAKE_LIBDIR += /home/wzl/arm_openssl/lib       #已编译的openssl库路径# modifications to g++.conf
QMAKE_CC                = arm-linux-gnueabihf-gcc
QMAKE_CXX               = arm-linux-gnueabihf-g++
QMAKE_LINK              = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
QMAKE_NM                = arm-linux-gnueabihf-nm -P
QMAKE_STRIP             = arm-linux-gnueabihf-strip
load(qt_config)

4.2.1 编写构建脚本

$ vim build.sh内容如下:
#!/bin/sh
./configure \
-v \
-prefix /home/wzl/workspace/Arm_Qt5.9.4 \
-release \
-opensource \
-no-accessibility \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-sqlite \
-qt-zlib \
-openssl-linked \
-no-sse2 \
-no-openssl \
-opengl es2 \
-no-cups \
-no-glib \
-no-iconv \
-no-pkg-config \
-no-separate-debug-info \
-skip qt3d \
-skip qtcanvas3d \
-skip qtdoc \
-skip qtwayland
exit

4.2.3 编译

配置执行权限
$ sudo chmod 777 build.sh$ ./build.sh

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

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

相关文章

洛谷P1009阶乘之和

题目描述 用高精度计算出S1!2!3!⋯n!(n≤50)。 其中 ! 表示阶乘,定义为 n!n(n−1)(n−2)⋯1。例如,5!543211205!54321120。 输入格式 一个正整数 n。 输出格式 一个正整数 S,表示计算结果。 输入输出样例 输入…

2024/3/1 贪心

跳跳 跳跳&#xff01; - 洛谷 思路&#xff1a;从一个数组里面依次取出最大值和最小值&#xff0c;然后进行运算 完整代码&#xff1a; #include <bits/stdc.h> #define int long long #define PII std::pair<int,int> signed main() {int n;std::cin >>…

接口文档-示例

接口文档-示例 1 根据ID查询员工 1.1 基本信息 请求路径&#xff1a;/emp 请求方式&#xff1a;GET 接口描述&#xff1a;该接口用于根据ID查询员工信息 1.2 请求参数 参数说明&#xff1a; 参数名类型是否必须备注idnumber必须员工ID 请求样例&#xff1a; GET http://l…

string【基础篇】

1.1string字符串类 注意&#xff1a;这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列&#xff0c;这个 类的所有成员(如长度或大小)以及它的迭代器&#xff0c;将仍然按照字节(而不是实际编码的字符)来操作。 总结&#xff1a; string是表…

设计模式系列文章-7个创建型模式更新已完结

其实从2019年开始就有些一套关于设计模式的系列文章&#xff0c;但是因为种种原因一直搁置到现在。直到2024年才又恢复更新。 24年1月份上旬一直在弄博客站&#xff1a;https://jaune162.blog 的搭建 24年1月份下旬弄专题站&#xff1a;https://books.jaune162.blog 的搭建。…

「优选算法刷题」:二进制求和

一、题目 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 示例 1&#xff1a; 输入:a "11", b "1" 输出&#xff1a;"100" 示例 2&#xff1a; 输入&#xff1a;a "1010", b "1011" …

Qt应用软件【测试篇】vargrid内存检查工具

文章目录 vargrid介绍vargrid官网vargrid安装常用命令Valgrind的主要命令vargrid介绍 Valgrind是一个用于构建动态分析工具的框架,能自动检测许多内存管理和线程错误,并详细分析程序性能。Valgrind发行版包括七个成熟工具:内存错误检测器、两个线程错误检测器、缓存和分支预…

Java8 - LocalDateTime时间日期类使用详解

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

redis+定时 模拟滑动窗口实现熔断降级

业务背景 公司业务现用的通道为 A、B&#xff0c;为了降本&#xff0c;引入新的支付通道 Y&#xff0c;但 Y 通道的稳定性要低于 A、B&#xff0c;系统要能在 Y 通道故障时自动切回到 A、B&#xff0c;等 Y 恢复正常后&#xff0c;再切换到 Y。 乍一看很简单&#xff0c;不就是…

使用链表和数组输出A~Z的ASCII码

输出结果 26个字母以及其对应的ASCII码 一、使用链表创建&#xff0c;注意&#xff1a; 节点需要有next指针初始化时head需要new一下 cur指针代表当前指针&#xff0c;每次不断的New新的节点&#xff0c;pre指针代表当前指针的前一个指针&#xff0c;每次pre的next指针指向cur…

sql注入攻击 - cookie注入

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、Cookie 知识介绍 Cookie(HTTP Cookie)是服务器发送到用户浏览器并保存在本地的一小段数据,用于记录用户的相关信息和状态。这些信息通常包括用户的身份标识、网站偏好设置…

3.1日学习打卡----初学FastDFS(一)

3.1日学习打卡 目录: 3.1日学习打卡一. 为什么要使用分布式文件系统二. FastDFS简介核心概念上传机制下载机制FastDFS环境搭建_LinuxFastDFS指令 一. 为什么要使用分布式文件系统 单机时代 初创时期由于时间紧迫&#xff0c;在各种资源有限的情况下&#xff0c;通常就直接在项…

二分+质因数分解,LightOJ 1138Trailing Zeroes (III)

一、题目 1、题目描述 You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in decimal notation. As you know N! 1 * 2 * ... * N. For example, 5! 120, 120 contains one zero on the trail. 2、输入输出 2.1输入 Input…

HTML---Ajax

文章目录 目录 文章目录 前言 一.Ajax概述 二.原生创建Ajax 三,使用Jquery处理Ajax 总结 一.Ajax概述 AJAX&#xff08;Asynchronous Javascript And XML&#xff09;是一种创建交互式网页应用的网页开发技术。它使用Javascript语言与服务器进行异步交互&#xff0c;可以传…

【计算机网络】五种IO模型与IO多路转接之select

文章目录 一、五种IO模型二、非阻塞IO1.fcntl2.实现函数SetNoBlock3.轮询方式读取标准输入 三、I/O多路转接之select1.初识select2.select函数原型3.socket就绪条件4.select的特点5.select缺点6.select使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.select…

DBGridEh 的排序

DBGridEh 可以点列抬头使得记录按该列排序 不需要写代码&#xff0c;只需要设置好&#xff0c;它就能排序。 网上的文章一般写了如何设置。但一般都少说了一条。 先说如何设置&#xff1a; 1. OptionsEh.AutoSortMarking 设置为 True&#xff0c;如果是设计期属性面板&…

Linux上搭建并使用ffmpeg(Java)

关于MacOs和Windows系统上使用ffmpeg就不多说了&#xff0c;有很多相关文章&#xff0c;今天给大家分享一个在Linux环境下使用Java语言来使用ffmpeg 一、首先去官网下载一个Linux对应的ffmpeg包 1、进入ffmpeg官网&#xff1a;官网 2、点击左侧导航栏Download 3、选择Linux对…

如何利用graylog进行容器化日志管理?

Docker日志 当一个容器启动的时候&#xff0c;它其实是docker deamon的一个子进程&#xff0c;docker daemon可以拿到容器里面进程的标准输出&#xff0c;然后通过自身的LogDriver模块来处理&#xff0c;LogDriver支持的方式很多&#xff0c;默认写到本地文件&#xff0c;也可…

vue自定义实现icon选择器

<template> <div> <span class"iconStyle" click"selectIcon"> <i :class"value" /> </span> <div class"iconTitle">选择图标</div> <el-dialog title"" :visible.sync"…

springboot + nacos + aws secretmanager 做账号密码隐私处理

方式一&#xff1a; #nacos配置文件data.yml: spring:cloud:nacos:discovery:ip: ****.comport: 80datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://*********/database?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&fail…