一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt源碼跨平臺(tái)源碼編譯構(gòu)建過(guò)程中的注意點(diǎn)

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

在硬件板卡提供商提供的嵌入式linux平臺(tái)下的Qt環(huán)境中,很多時(shí)候會(huì)存在許多問(wèn)題:

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

(2)在廠家提供的平臺(tái)開發(fā)環(huán)境中,支持的東西太多,太雜,導(dǎo)致整個(gè)文件系統(tǒng)鏡像太大。這時(shí)候?yàn)榱藴p小根文件系統(tǒng),往往需要自己集成和編譯開發(fā)環(huán)境。

(3)不同版本Qt編譯構(gòu)建出的庫(kù)文件,一般會(huì)不兼容,需要針對(duì)特定版本進(jìn)行交叉編譯。

本文主要是記錄在Qt源碼跨平臺(tái)源碼編譯構(gòu)建過(guò)程中的一些注意點(diǎn)以及自己的思考。因平臺(tái)太多,軟件環(huán)境大多不同,故不會(huì)針對(duì)特定平臺(tái)進(jìn)行詳細(xì)步驟描述,所以記錄些共同點(diǎn),細(xì)節(jié)點(diǎn)就略過(guò)啦。如果有疑問(wèn),可以加小生微信相互交流,互相學(xué)習(xí),哈哈!

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

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

從目錄結(jié)構(gòu)來(lái)觀察,源碼結(jié)構(gòu)以模塊方式高度劃分。Qt的各個(gè)模塊都可以單獨(dú)編譯,當(dāng)然一般使用最多的是整體編譯。在使用工具(例如buildroot)制作嵌入式linux根文件系統(tǒng)時(shí),對(duì)Qt部分是自動(dòng)編譯的(暫不清楚里面的構(gòu)建細(xì)節(jié))

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

在Qt源碼目錄下執(zhí)行:

./configure--help

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

當(dāng)我們?cè)赒t源碼目錄下執(zhí)行./configure命令時(shí),可以配置整體編譯方案,我們則可以在此處設(shè)置想要編譯構(gòu)建的參數(shù)和模塊。

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

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

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

只編譯構(gòu)建qtbase,開發(fā)運(yùn)行常見(jiàn)窗體應(yīng)用是可以的

mkspecs目錄

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

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

因?yàn)镼t是跨平臺(tái)的,在該目錄下則存放了許多與具體平臺(tái)相關(guān)的目錄,目錄的名稱則是以具體架構(gòu)來(lái)命名,且目錄中存放了兩個(gè)文件:

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

qmake.conf:該文件是關(guān)于具體架構(gòu)的qmake配置描述,一般內(nèi)容格式如下:

#
#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:該文件是一個(gè)頭文件,文件中內(nèi)容用于描述具體模塊層級(jí)包含的相關(guān)頭文件依賴。

qmake.conf是一個(gè)重要的文件,在針對(duì)具體平臺(tái)編譯構(gòu)建源碼時(shí),可能需要修改該文件下的內(nèi)容:

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

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

編譯構(gòu)建qtbase

本小節(jié)以在ubuntu系統(tǒng)下,交叉編譯Arm64平臺(tái)的Qt版本為目標(biāo)。記錄qtbase的編譯構(gòu)建步驟。

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

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

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

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

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

(經(jīng)對(duì)比,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

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

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

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

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

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

注:根據(jù)編譯構(gòu)建環(huán)境的硬件配置,整個(gè)編譯構(gòu)建過(guò)程可能會(huì)需要幾分鐘甚至幾十分鐘。

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

安裝完成后,會(huì)在-prefix參數(shù)指定的路徑下自動(dòng)創(chuàng)建幾個(gè)目錄,如下圖所示:3e21e472-427c-11ed-96c9-dac502259ad0.png

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

doc:為對(duì)應(yīng)模塊的文檔目錄。

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

include:該目錄存放與該模塊相關(guān)的包含頭文件。

lib:該目錄下存放的是與該模塊相關(guān)的庫(kù)文件。

plugins:該目錄下存放插件目錄,在對(duì)應(yīng)插件目錄下存放著對(duì)應(yīng)的插件庫(kù)文件。

在上述過(guò)程中,我們已經(jīng)編譯構(gòu)建且安裝好了qtbase,如果在開發(fā)中,還想增加其他的組件模塊,我們可以直接到模塊對(duì)應(yīng)的目錄路徑下編譯即可。例如,如果想編譯構(gòu)建qtcharts模塊,可以按照如下步驟進(jìn)行:

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

(2)用在qtbase編譯出的qmake工具來(lái)配置(這個(gè)qmake會(huì)自動(dòng)延用qtbase交叉編譯時(shí)的配置),qmake工具位于-prefix參數(shù)指定的路徑下的bin目錄中:

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

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

(4)使用make install安裝。

完整編譯構(gòu)建Qt源碼

完整編譯Qt源碼指的是在Qt源碼路徑下進(jìn)行編譯,使用configure對(duì)Qt進(jìn)行編譯配置時(shí)指定需要編譯的模塊。

完整編譯構(gòu)建步驟如下:

(1)與上述編譯qtbase一樣,需要確保準(zhǔn)備好了交叉編譯器環(huán)境,且配置好具體目標(biāo)平臺(tái)下的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

上述的配置文本,可通過(guò)./configure -help查看對(duì)應(yīng)的意思。

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

上述配置跳過(guò)了幾個(gè)Qt模塊,且使用linuxfb作為顯示平臺(tái)插件,為ARM32編譯Qt跨平臺(tái)開發(fā)環(huán)境。

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

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

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11420

    瀏覽量

    212361
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    665

    瀏覽量

    30064
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    1

    文章

    312

    瀏覽量

    38637

原文標(biāo)題:交叉編譯Qt源碼筆記

文章出處:【微信號(hào):嵌入式小生,微信公眾號(hào):嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenHarmony開發(fā)學(xué)習(xí):【源碼下載和編譯

    本文介紹了如何下載鴻蒙系統(tǒng)源碼,如何一次性配置可以編譯三個(gè)目標(biāo)平臺(tái)(`Hi3516`,`Hi3518`和`Hi3861`)的編譯環(huán)境,以及如何將源碼
    的頭像 發(fā)表于 04-14 09:36 ?1175次閱讀
    OpenHarmony開發(fā)學(xué)習(xí):【<b class='flag-5'>源碼</b>下載和<b class='flag-5'>編譯</b>】

    如何編譯ARM版本LINUX QT4.5

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

    【OK210試用體驗(yàn)】之QT編譯過(guò)程中疑惑求解

    因?yàn)橐褂冒遄油瓿捎?jì)算機(jī)輔助繪圖中坐標(biāo)的提取,上位機(jī)采用QT來(lái)制作的,所以需要對(duì)QT進(jìn)行移植,本人是參考OK6410 QT移植百科全書,發(fā)現(xiàn)QT源碼
    發(fā)表于 09-24 11:29

    Linux QT5程序編譯準(zhǔn)備源碼

    Linux QT5程序編譯準(zhǔn)備源碼  打開網(wǎng)盤到 5_MY-Demo,下載 MY-Linux-QT5-Demo-AboutUs-svn*.tar.bz2 文件,并復(fù)制到虛擬機(jī)。解壓
    發(fā)表于 03-08 11:27

    手動(dòng)編譯QT源碼生成qmake

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

    qt源碼庫(kù)在樹莓派的部署方法

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

    請(qǐng)問(wèn)QT怎么實(shí)現(xiàn)源碼編譯?

    你好,QT怎么實(shí)現(xiàn)源碼編譯
    發(fā)表于 12-31 07:49

    瑞芯微RK3568開發(fā)板源碼編譯與交叉編譯環(huán)境搭建

    工具,對(duì)應(yīng)Qt開發(fā),需要注意是qmake這個(gè)工具,bin目錄的所有編譯工具如下:使用資料中的Qt程序進(jìn)行交叉
    發(fā)表于 02-27 08:52

    qt源碼編譯安裝遇到的問(wèn)題

    QT源碼make通過(guò)后執(zhí)行make install時(shí)報(bào)錯(cuò)。
    發(fā)表于 12-09 15:56

    編譯UCOSII源碼過(guò)程

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

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

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

    QT設(shè)計(jì)的網(wǎng)絡(luò)助手源碼

    QT設(shè)計(jì)的網(wǎng)絡(luò)助手源碼
    發(fā)表于 09-27 11:46 ?2次下載

    qt設(shè)計(jì)的Google拼音輸入法源碼

    qt設(shè)計(jì)的Google拼音輸入法源碼分享
    發(fā)表于 09-26 17:40 ?5次下載

    qt opencv opencl opengl源碼例程

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

    搭建一種平臺(tái)qt5遠(yuǎn)程編譯環(huán)境

    所謂的平臺(tái)qt5遠(yuǎn)程編譯環(huán)境,就是實(shí)現(xiàn)在本機(jī)的VS上寫Qt程序,然后在遠(yuǎn)程的linux機(jī)器上進(jìn)行編譯
    的頭像 發(fā)表于 07-25 15:05 ?1646次閱讀
    搭建一種<b class='flag-5'>跨</b><b class='flag-5'>平臺(tái)</b><b class='flag-5'>qt</b>5遠(yuǎn)程<b class='flag-5'>編譯</b>環(huán)境