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.pswp.cn/news/712330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712330.shtml
英文地址,請注明出處:http://en.pswp.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…