精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Qt源碼跨平臺源碼編譯構建過程中的注意點

嵌入式小生 ? 來源:嵌入式小生 ? 作者:嵌入式小生 ? 2022-10-08 11:51 ? 次閱讀

硬件板卡提供商提供的嵌入式linux平臺下的Qt環境中,很多時候會存在許多問題:

(1)可能一些Qt的模塊不支持。這時候要么找廠家,要么自己編譯。

(2)在廠家提供的平臺開發環境中,支持的東西太多,太雜,導致整個文件系統鏡像太大。這時候為了減小根文件系統,往往需要自己集成和編譯開發環境。

(3)不同版本Qt編譯構建出的庫文件,一般會不兼容,需要針對特定版本進行交叉編譯。

本文主要是記錄在Qt源碼跨平臺源碼編譯構建過程中的一些注意點以及自己的思考。因平臺太多,軟件環境大多不同,故不會針對特定平臺進行詳細步驟描述,所以記錄些共同點,細節點就略過啦。如果有疑問,可以加小生微信相互交流,互相學習,哈哈!

編譯Qt源碼,首先就獲取源碼,從Qt官方網站https://download.qt.io/archive/qt/獲取源碼。將其解壓縮,完成后如下圖所示:

3c93ca1c-427c-11ed-96c9-dac502259ad0.png

從目錄結構來觀察,源碼結構以模塊方式高度劃分。Qt的各個模塊都可以單獨編譯,當然一般使用最多的是整體編譯。在使用工具(例如buildroot)制作嵌入式linux根文件系統時,對Qt部分是自動編譯的(暫不清楚里面的構建細節)

在上圖中,有一個qtbase目錄,該目錄是Qt的基礎模塊目錄,該目錄下同樣有configure文件(在源碼目錄下也有一個configure配置文件,這兩個文件不一樣)

在Qt源碼目錄下執行:

./configure--help

會打印出幫助信息,在/qtbase目錄下使用上述命令同樣會打印幫助信息,只是在此處打印出的信息比在源碼目錄下使用confiigure --help命令打印出的幫助信息少。

當我們在Qt源碼目錄下執行./configure命令時,可以配置整體編譯方案,我們則可以在此處設置想要編譯構建的參數和模塊。

在/qtbase目錄下,執行./configure命令時,配置的是在該目錄下的Qt基本模塊。從源碼目錄結構,可以知道在qtbase模塊下包含許多子模塊:

3ccfc120-427c-11ed-96c9-dac502259ad0.png

其中包含:core、network、sql、widget等。

只編譯構建qtbase,開發運行常見窗體應用是可以的

mkspecs目錄

在qtbase目錄下,存放了多個目錄,如下圖所示:

3cfba4d4-427c-11ed-96c9-dac502259ad0.png

因為Qt是跨平臺的,在該目錄下則存放了許多與具體平臺相關的目錄,目錄的名稱則是以具體架構來命名,且目錄中存放了兩個文件:

3d37cc66-427c-11ed-96c9-dac502259ad0.png

qmake.conf:該文件是關于具體架構的qmake配置描述,一般內容格式如下:

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

#modificationstog++.conf
QMAKE_CC=aarch64-linux-gnu-gcc
QMAKE_CXX=aarch64-linux-gnu-g++
QMAKE_LINK=aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB=aarch64-linux-gnu-g++

#modificationstolinux.conf
QMAKE_AR=aarch64-linux-gnu-arcqs
QMAKE_OBJCOPY=aarch64-linux-gnu-objcopy
QMAKE_NM=aarch64-linux-gnu-nm-P
QMAKE_STRIP=aarch64-linux-gnu-strip
load(qt_config)

qplatformdefs.h:該文件是一個頭文件,文件中內容用于描述具體模塊層級包含的相關頭文件依賴。

qmake.conf是一個重要的文件,在針對具體平臺編譯構建源碼時,可能需要修改該文件下的內容:

3d5276ec-427c-11ed-96c9-dac502259ad0.png在上述圖片中,等號右邊表示具體的編譯構建工具名稱。需要提前安裝對應的編譯套件且將他們添加到環境變量中(如果沒有添加,可以以絕對路徑來描述)。例如,如果是在linux平臺下,且將編譯器添加到了環境變量中,可以使用編譯器名稱加上v參數選項查看編譯器信息,此處以交叉編譯器aarch64-linux-gnu為例:

3d8012a0-427c-11ed-96c9-dac502259ad0.png

編譯構建qtbase

本小節以在ubuntu系統下,交叉編譯Arm64平臺的Qt版本為目標。記錄qtbase的編譯構建步驟。

交叉編譯器為:gcc-linara-6.3.1-2017.05-x86_64_aarch64-linux-gnu

(1)準備好交叉編譯工具后,將交叉編譯器的路徑添加到ubuntu環境變量中。參見《一文分享linux的環境變量》一文。

(2)在源碼目錄下使用cd qtbase將終端切換到qtbase目錄下。

(3)查看/qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf文件內容。編譯器一欄所填寫的命令,需要與交叉編譯器套件名稱一樣。小生的交叉編譯器套件如下圖所示:

3de643f4-427c-11ed-96c9-dac502259ad0.png

(經對比,qmake.conf文件中交叉編譯器名稱與上圖所示名稱一樣,故此處不用修改qmake.conf文件)

(4)在終端使用下列命令:

./configure
-prefix編譯安裝的目錄路徑
-xplatformlinux-aarch64-gnu-g++
-no-opengl
-opensource
-confirm-license
-release
-strip
-shared
-c++stdc++11
--sqlite=qt
-recheck-all

(注:可以將上述內容寫成腳本,直接在終端下運行即可)

-prefix:該參數用于指定Qt編譯完成后安裝時的輸出目錄。

-xplatform:用于交叉編譯時選擇目標mkspec。(需與qtbase/mkspec目錄下的目錄名稱一樣)

其他參數含義可以使用./configure -help打印出幫助信息查看。

(5)使用make -j12編譯構建qtbase。(-j12表示同時允許的任務數,計算機性能好,就指定12或更高。計算機性能弱就指定低數值或不指定-j參數)

注:根據編譯構建環境的硬件配置,整個編譯構建過程可能會需要幾分鐘甚至幾十分鐘。

(6)編譯完成后,在終端使用make install命令將編譯成功后的文件安裝到-prefix參數指定的路徑下。

安裝完成后,會在-prefix參數指定的路徑下自動創建幾個目錄,如下圖所示:3e21e472-427c-11ed-96c9-dac502259ad0.png

bin:該目錄下包含生成的Qt版本的二進制程序。例如:moc、qmake、rcc、uic等Qt構建工具。

doc:為對應模塊的文檔目錄。

examples:該目錄中存放的是與該模塊相關的Qt演示demo(源碼+生成的可執行體)。

include:該目錄存放與該模塊相關的包含頭文件。

lib:該目錄下存放的是與該模塊相關的庫文件。

plugins:該目錄下存放插件目錄,在對應插件目錄下存放著對應的插件庫文件。

在上述過程中,我們已經編譯構建且安裝好了qtbase,如果在開發中,還想增加其他的組件模塊,我們可以直接到模塊對應的目錄路徑下編譯即可。例如,如果想編譯構建qtcharts模塊,可以按照如下步驟進行:

(1)切換到qtcharts目錄路徑下,打開終端。

(2)用在qtbase編譯出的qmake工具來配置(這個qmake會自動延用qtbase交叉編譯時的配置),qmake工具位于-prefix參數指定的路徑下的bin目錄中:

編譯安裝的目錄路徑/bin/qamke

(3)使用make -j12編譯構建。

(4)使用make install安裝。

完整編譯構建Qt源碼

完整編譯Qt源碼指的是在Qt源碼路徑下進行編譯,使用configure對Qt進行編譯配置時指定需要編譯的模塊。

完整編譯構建步驟如下:

(1)與上述編譯qtbase一樣,需要確保準備好了交叉編譯器環境,且配置好具體目標平臺下的qmake配置文件,然后在Qt源碼目錄下打開終端。

(2)使用下列命令配置Qt源碼:

#!/bin/sh
./configure-prefix/home/Qt/qt-everywhere-src-5.12.9/arm-qt
-opensource
-confirm-license
-release
-strip
-shared
-xplatformlinux-arm-gnueabi-g++
-optimized-qmake
-c++stdc++11
--rpath=no
-pch
-skipqt3d
-skipqtactiveqt
-skipqtandroidextras
-skipqtcanvas3d
-skipqtconnectivity
-skipqtdatavis3d
-skipqtdoc
-skipqtgamepad
-skipqtlocation
-skipqtmacextras
-skipqtnetworkauth
-skipqtpurchasing
-skipqtremoteobjects
-skipqtscript
-skipqtscxml
-skipqtsensors
-skipqtspeech
-skipqtsvg
-skipqttools
-skipqttranslations
-skipqtwayland
-skipqtwebengine
-skipqtwebview
-skipqtwinextras
-skipqtx11extras
-skipqtxmlpatterns
-makelibs
-makeexamples
-nomaketools-nomaketests
-gui
-widgets
-dbus-runtime
--glib=no
--iconv=no
--pcre=qt
--zlib=qt
-no-openssl
--freetype=qt
--harfbuzz=qt-no-opengl-linuxfb
--xcb=no-tslib
--libpng=qt
--libjpeg=qt
--sqlite=qt
-plugin-sql-sqlite
-I/home/Qt/tslib-1.21/arm-tslib/include
-L/home/Qt/tslib-1.21/arm-tslib/lib
-recheck-all

上述的配置文本,可通過./configure -help查看對應的意思。

參考鏈接:https://doc.qt.io/qt-5/configure-options.html

上述配置跳過了幾個Qt模塊,且使用linuxfb作為顯示平臺插件,為ARM32編譯Qt跨平臺開發環境。

(3)在終端使用make -j12編譯構建Qt源碼。

(4)在終端使用make installl命令將編譯成功后的文件安裝到-prefix參數指定的路徑下。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11232

    瀏覽量

    208949
  • 源碼
    +關注

    關注

    8

    文章

    633

    瀏覽量

    29146
  • Qt
    Qt
    +關注

    關注

    1

    文章

    301

    瀏覽量

    37837

原文標題:交叉編譯Qt源碼筆記

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    OpenHarmony開發學習:【源碼下載和編譯

    本文介紹了如何下載鴻蒙系統源碼,如何一次性配置可以編譯三個目標平臺(`Hi3516`,`Hi3518`和`Hi3861`)的編譯環境,以及如何將源碼
    的頭像 發表于 04-14 09:36 ?878次閱讀
    OpenHarmony開發學習:【<b class='flag-5'>源碼</b>下載和<b class='flag-5'>編譯</b>】

    如何編譯ARM版本LINUX QT4.5

    天嵌科技推出最新一期天嵌使用教程,教程將會演示在E9卡片電腦中,如何編譯LINUX QT4.5。該教程在E9卡片電腦用戶手冊,在11.2.4小章,詳細描述在ARM平臺上運行編譯
    發表于 02-06 16:51

    【OK210試用體驗】之QT編譯過程中疑惑求解

    因為要使用板子完成計算機輔助繪圖中坐標的提取,上位機采用QT來制作的,所以需要對QT進行移植,本人是參考OK6410 QT移植百科全書,發現QT源碼
    發表于 09-24 11:29

    Linux QT5程序編譯準備源碼

    Linux QT5程序編譯準備源碼  打開網盤到 5_MY-Demo,下載 MY-Linux-QT5-Demo-AboutUs-svn*.tar.bz2 文件,并復制到虛擬機。解壓
    發表于 03-08 11:27

    手動編譯QT源碼生成qmake

    交叉編譯QT4.8.7源碼生成qmake工具TQ-i.MX6UL使用的QT版本是QT4.8.7,板卡出廠前附帶的開發資料中,天嵌官方沒有為開
    發表于 11-05 08:20

    qt源碼庫在樹莓派的部署方法

    接安裝qt。本文介紹最普遍的部署方式,就是在pc端的ubuntu交叉編譯源碼,然后上傳編譯好的庫到樹莓派,最后配置
    發表于 12-24 06:44

    請問QT怎么實現源碼編譯

    你好,QT怎么實現源碼編譯,
    發表于 12-31 07:49

    瑞芯微RK3568開發板源碼編譯與交叉編譯環境搭建

    工具,對應Qt開發,需要注意是qmake這個工具,bin目錄的所有編譯工具如下:使用資料中的Qt程序進行交叉
    發表于 02-27 08:52

    qt源碼編譯安裝遇到的問題

    QT源碼make通過后執行make install時報錯。
    發表于 12-09 15:56

    編譯UCOSII源碼過程

    編譯UCOSII源碼過程
    發表于 10-30 15:24 ?11次下載
    <b class='flag-5'>編譯</b>UCOSII<b class='flag-5'>源碼</b><b class='flag-5'>過程</b>

    嵌入式Linux開發環境搭建-(6)交叉編譯QT4.8.7源碼生成qmake工具

    交叉編譯QT4.8.7源碼生成qmake工具TQ-i.MX6UL使用的QT版本是QT4.8.7,板卡出廠前附帶的開發資料中,天嵌官方沒有為開
    發表于 11-02 13:21 ?3次下載
    嵌入式Linux開發環境搭建-(6)交叉<b class='flag-5'>編譯</b><b class='flag-5'>QT</b>4.8.7<b class='flag-5'>源碼</b>生成qmake工具

    QT設計的網絡助手源碼

    QT設計的網絡助手源碼
    發表于 09-27 11:46 ?2次下載

    qt設計的Google拼音輸入法源碼

    qt設計的Google拼音輸入法源碼分享
    發表于 09-26 17:40 ?1次下載

    qt opencv opencl opengl源碼例程

    qt-opencv-opencl-opengl-源碼例程
    發表于 09-27 14:42 ?1次下載

    搭建一種平臺qt5遠程編譯環境

    所謂的平臺qt5遠程編譯環境,就是實現在本機的VS上寫Qt程序,然后在遠程的linux機器上進行編譯
    的頭像 發表于 07-25 15:05 ?1110次閱讀
    搭建一種<b class='flag-5'>跨</b><b class='flag-5'>平臺</b><b class='flag-5'>qt</b>5遠程<b class='flag-5'>編譯</b>環境