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

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

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

【技術(shù)案例】Qt 環(huán)境部署 - Ubuntu 篇

Firefly開(kāi)源團(tuán)隊(duì) ? 2025-04-16 17:17 ? 次閱讀

什么是 Qt?

Qt 是一個(gè)跨平臺(tái) C++ 圖形用戶(hù)界面應(yīng)用程序開(kāi)發(fā)框架,可構(gòu)建高性能的桌面、移動(dòng)及 Web 應(yīng)用程序,也可用于開(kāi)發(fā)非 GUI 程序,比如控制臺(tái)工具和服務(wù)器。Qt 是面向?qū)ο蟮目蚣?,使用特殊的代碼生成擴(kuò)展以及一些宏,Qt 很容易擴(kuò)展,并且允許真正的組件編程

Qt 因其模塊化程度高,可重用性好,可以快速上手等特點(diǎn),成為了一款非常受歡迎的開(kāi)發(fā)框架。

Ubuntu 18/20 部署

Firefly 針對(duì) Firefly 產(chǎn)品上運(yùn)行的 Ubuntu 18/20 系統(tǒng)提供了對(duì)應(yīng)的 Qt 環(huán)境包,可以快速部署、開(kāi)發(fā)。兩個(gè)系統(tǒng)的環(huán)境包不通用,請(qǐng)根據(jù)你的 Firefly 設(shè)備所運(yùn)行的系統(tǒng)版本,選擇對(duì)應(yīng)的環(huán)境包。

環(huán)境包請(qǐng)點(diǎn)擊此處下載,提取碼:FFQT

環(huán)境包采用交叉編譯的模式,在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。我們需要在 x86_64 架構(gòu)的 Linux 電腦上進(jìn)行開(kāi)發(fā)和編譯,并將編譯生成的可執(zhí)行文件放到 Arm64 架構(gòu)的目標(biāo)設(shè)備上運(yùn)行,所以環(huán)境包需要往主機(jī)端和設(shè)備端都部署一遍。

注意:不同版本的環(huán)境包有些許差別,后面的部署和環(huán)境準(zhǔn)備部分只能取一種進(jìn)行講解,具體使用時(shí)請(qǐng)查看環(huán)境包內(nèi)自帶的文檔。

主機(jī)端部署

關(guān)于主機(jī)端的選擇:請(qǐng)使用和目標(biāo)設(shè)備有相同系統(tǒng)的主機(jī)進(jìn)行開(kāi)發(fā)。

例如:需要給運(yùn)行 Ubuntu 20 的 Firefly 設(shè)備開(kāi)發(fā) Qt 程序,那么主機(jī)也應(yīng)該選擇系統(tǒng)為 Ubuntu 20 的電腦。

1. 開(kāi)始部署

解壓環(huán)境包到電腦后,cd 到解壓出來(lái)的目錄中,開(kāi)始進(jìn)行部署。主要分為 3 步:

#將文件復(fù)制到系統(tǒng)/opt/目錄下cp -rfd firefly_qt5.15_arm64_20.04 /opt/
# 將 sysroot 也復(fù)制到 /opt/ 目錄下cp -rfd sysroot /opt/
# 復(fù)制環(huán)境變量文件到 /etc/profile.d/ 下cphost/host_qtEnv.sh/etc/profile.d/


2. 環(huán)境準(zhǔn)備

安裝交叉編譯器。

sudo apt updatesudo apt install -y crossbuild-essential-arm64

然后重新登錄或者重啟電腦,以確保之前復(fù)制的環(huán)境變量能生效。

3. 驗(yàn)證

環(huán)境壓縮包中還附帶一個(gè) example 文件夾,里面包含幾個(gè)簡(jiǎn)單的 Qt demo,可以用于驗(yàn)證環(huán)境是否搭建成功。一切正常則說(shuō)明環(huán)境部署成功。

# 例如使用 analogclock 來(lái)驗(yàn)證cd example/analogclock
# 執(zhí)行 qmake 自動(dòng)生成編譯系統(tǒng)qmake
# 執(zhí)行 make 開(kāi)始編譯make

設(shè)備端部署

1. 開(kāi)始部署

解壓環(huán)境包到設(shè)備后,cd 到解壓出來(lái)的目錄中,開(kāi)始進(jìn)行部署。主要分為 2 步:

# 將 ext 部分復(fù)制到系統(tǒng)的 /opt/ 目錄下,注意此處順便是將 ext 重命名成了 firefly_qt5.15cp -rfd firefly_qt5.15_arm64_20.04/ext /opt/firefly_qt5.15
# 復(fù)制環(huán)境變量文件到 /etc/profile.d/ 下cp target/target_qtEnv.sh /etc/profile.d/

2. 環(huán)境準(zhǔn)備

設(shè)備上還需要安裝一些必要的庫(kù):

apt install -y libmtdev1 libinput10 libxkbcommon0 \ libdouble-conversion3 libicu66 libharfbuzz0b \ libwebpdemux2 libwebpmux3

打開(kāi)`/etc/profile.d/target_qtEnv.sh`可以看到其中有三部分注釋掉的環(huán)境變量:

#XCB#export QT_QPA_PLATFORM=XCB#export QT_QPA_EGLFS_INTEGRATION=XCB_EGL
#LinuxFB#export QT_QPA_PLATFORM=LINUXFB#export QT_QPA_FB_DRM=1
#EGLFS#export QT_QPA_PLATFORM=EGLFS#export QT_QPA_EGLFS_INTEGRATION=EGLFS_KMS #in minimal ubuntu, use eglfs_kms.#export QT_QPA_EGLFS_KMS_ATOMIC=1 #use drm atomic api or legacy api(two different)#export QT_QPA_EGLFS_HIDECURSOR=1 #hide cursor

根據(jù)你想使用的 QPA_PLATFORM 來(lái)取消對(duì)應(yīng)部分的注釋。比如 Ubuntu 環(huán)境一般使用 XCB,取消這部分的注釋?zhuān)缓蟊4娌⑼顺鼍庉嫛?/p>

#XCBexport QT_QPA_PLATFORM=XCBexport QT_QPA_EGLFS_INTEGRATION=XCB_EGL

如果使用 XCB 的話,還需要安裝一些額外的庫(kù):

apt install -y libxcb-icccm4 libxcb-image0 libxcb-shm0 \ libxcb-keysyms1 libxcb-render0 libxcb-render-util0 \ libxcb-shape0 libxcb-sync1 libxcb-xfixes0 \ libxcb-xinerama0 libxcb-xkb1 libxcb-randr0 \ libsm6 libice6 libxkbcommon-x11-0

最后執(zhí)行 reboot 重啟設(shè)備。

3. 驗(yàn)證

將之前在主機(jī)端編譯好的可執(zhí)行文件,轉(zhuǎn)移到設(shè)備端運(yùn)行;如果運(yùn)行正常,則說(shuō)明設(shè)備端環(huán)境搭建成功。

LD_LIBRARY_PATH=/opt/firefly_qt5.15/lib ./analogclock

Ubuntu 22 部署

如果目標(biāo) Firefly 設(shè)備運(yùn)行的是 Ubuntu 22 系統(tǒng),則不需要交叉編譯開(kāi)發(fā),安裝 Qt 更加簡(jiǎn)單方便。

Firefly 針對(duì) Ubuntu 22 將 Qt 環(huán)境做成了 deb 包,在目標(biāo)設(shè)備上使用 apt 即可安裝:

# 安裝基礎(chǔ)環(huán)境apt updateapt install -y qtcreator qtbase5-dev
# 根據(jù)開(kāi)發(fā)需要,安裝額外的 Qt 組件與開(kāi)發(fā)環(huán)境,例如apt install -y libqt5multimedia5 qtmultimedia5-dev libqt5quick5 qtdeclarative5-dev

Qt Creator 的配置

Qt 開(kāi)發(fā)常使用 Qt Creator 作為 IDE,前文中我們搭建了 Qt 開(kāi)發(fā)環(huán)境,那么接下來(lái)將介紹如何確保 Qt Creator 能使用我們建好的環(huán)境,而不是 IDE 自帶的或者其他位置的環(huán)境。

Ubuntu 18/20

在主機(jī)端可以使用如下命令快速安裝 Qt Creator:

sudo apt updatesudo apt install qtcreator

啟動(dòng) Qt Creator 后,首先點(diǎn)擊 tools -> options 打開(kāi)設(shè)置界面:

9ac9258a-1aa3-11f0-9434-92fbcf53809c.png

然后選擇 Qt Versions,點(diǎn)擊 add 添加 Qt 版本:

9ae36ef4-1aa3-11f0-9434-92fbcf53809c.png

在彈出的窗口中選擇我們之前復(fù)制到 /opt 中的 Qt 環(huán)境:

9af97708-1aa3-11f0-9434-92fbcf53809c.png

注意:此處的路徑,根據(jù)環(huán)境包的版本不同,會(huì)有一些差異,但最終都是要選擇 /opt 下 qmake 的位置

可以給新添加的 Qt Version 起個(gè)名字,然后點(diǎn)擊 apply 使添加生效:

9b149bdc-1aa3-11f0-9434-92fbcf53809c.png

之后選擇 Kits 頁(yè)面,添加新的 Kit:

9b2e7d2c-1aa3-11f0-9434-92fbcf53809c.png

配置新的 Kit 如下:

9b43b8d6-1aa3-11f0-9434-92fbcf53809c.png

配置的意義:首先給 Kit 起個(gè)名字,方便區(qū)分,Device Type 需要選擇 Generic Linux Device。重點(diǎn)是后面三個(gè)配置,Sysroot 需要選擇我們之前復(fù)制到 /opt 下的 sysroot;編譯器要選擇 arm 64bit 的 GCC;Qt Version 選擇我們上一步添加的 Qt Version,然后點(diǎn)擊 apply 應(yīng)用更改。

最后可以打開(kāi)一個(gè)項(xiàng)目,選擇我們新增的 Kit 進(jìn)行編譯,編譯成功則說(shuō)明我們配置正確:

9b57aa8a-1aa3-11f0-9434-92fbcf53809c.png

Ubuntu 22

目標(biāo)設(shè)備是 Ubuntu 22 系統(tǒng),不需要交叉編譯,所以直接在設(shè)備端安裝 Qt Creator。

因?yàn)槭峭ㄟ^(guò) apt 安裝的 Qt 環(huán)境,所以打開(kāi) Qt Creator 它應(yīng)該可以自動(dòng)探測(cè)到 qmake 位置:

9b71aa3e-1aa3-11f0-9434-92fbcf53809c.png

Qt Creator自動(dòng)探測(cè)到的qmake路徑為 /usr/lib/qt5/bin/qmake,無(wú)需再手動(dòng)添加 Qt Version。

Kit 的配置中,因?yàn)椴恍枰徊婢幾g,所以不設(shè)置 Sysroot,另外 Qt Version 選擇自動(dòng)探測(cè)到的 Qt Version,剩余其他配置和上一章的保持一樣即可。

常見(jiàn)問(wèn)題

1. 解壓失敗

如果解壓環(huán)境包的時(shí)候遇到這種錯(cuò)誤:

tar: xxxxx: Directory renamed before its status could be extractedtar: Exiting with failure status due to previous errors

可以給 tar 加上 -P 參數(shù)重新解壓,比如:

tar -Pzxf firefly_arm64_qt5.15_20.04_20230415.tgz

2. 找不到 Qt 庫(kù)

運(yùn)行 Qt 程序時(shí)如果出現(xiàn)找不到 Qt 庫(kù)的情況:

./analogclock: error while loading shared libraries: libQt5Gui.so.5: cannot open shared object file: No such file or directory

請(qǐng)檢查環(huán)境變量文件`/etc/profile.d/target_qtEnv.sh`是否存在?存在的話是否生效?Qt 庫(kù)路徑是否有按照文檔要求放到指定位置?

3. 多版本 Qt 沖突

運(yùn)行 Qt 程序時(shí)如果出現(xiàn)報(bào)錯(cuò)說(shuō)存在未定義的符號(hào):

./analogclock: symbol lookup error: ./analogclock: undefined symbol: _ZN9QGradientD1Ev, version Qt_5

說(shuō)明 Qt 程序找到了和自身版本不匹配的 Qt 庫(kù)。這種問(wèn)題常出現(xiàn)在有多個(gè) Qt 版本環(huán)境的系統(tǒng)中,比如本來(lái)我們需要`/opt/firefly_qt5.15`下的環(huán)境,但是 Qt 程序卻嘗試使用`/lib/aarch64-linux-gnu/libQt5Gui.so.5`,導(dǎo)致出現(xiàn)問(wèn)題。

使用 ldd 命令可以查看程序嘗試使用的庫(kù):

root@firefly:~/analogclock# ldd analogclock | grep -i qt libQt5Gui.so.5 => /opt/firefly_qt5.15/lib/libQt5Gui.so.5 (0x0000007f8e0b2000) libQt5Core.so.5 => /opt/firefly_qt5.15/lib/libQt5Core.so.5 (0x0000007f8daf6000)

解決方法一:

在編譯前就指定好程序優(yōu)先查找?guī)斓穆窂?,在?xiàng)目的 pro 文件中添加:

QMAKE_RPATHDIR += /opt/firefly_qt5.15/lib

解決方法二:

運(yùn)行程序時(shí)指定 LD_LIBRARY_PATH:

LD_LIBRARY_PATH=/opt/firefly_qt5.15/lib ./analogclock

4. 找不到顯示

運(yùn)行 Qt 程序時(shí)如果出現(xiàn)無(wú)法連接到顯示:

qt.qpa.xcb: could not connect to displayqt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, webgl, xcb.
Aborted

大概率是環(huán)境變量問(wèn)題,需要指定顯示,通常為:

# x11 環(huán)境使用:export DISPLAY=:0
# wayland 環(huán)境使用:export WAYLAND_DISPLAY=wayland-0

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • Ubuntu
    +關(guān)注

    關(guān)注

    5

    文章

    587

    瀏覽量

    30857
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3322

    瀏覽量

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

    關(guān)注

    1

    文章

    313

    瀏覽量

    38808
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【OK210試用體驗(yàn)】之(5)Ubuntu下安裝Qt

    Ubuntu12.04安裝Qt5.4教程:PC環(huán)境Ubuntu12.04 LTS(32)Q版本:Qt5.4.2步驟:1.
    發(fā)表于 10-17 17:39

    Ubuntu Core with Qt-Embedded系統(tǒng)說(shuō)明

    Ubuntu Core with Qt-Embedded,是一個(gè)沒(méi)有X-windows環(huán)境,使用Qt-Embedded作為圖形界面的輕量級(jí)ubunt
    發(fā)表于 09-23 15:20

    Ubuntu14.04上創(chuàng)建Qt 5.4.0開(kāi)發(fā)環(huán)境

    運(yùn)行前面創(chuàng)建的項(xiàng)目,已經(jīng)可以正常運(yùn)行了。到這里,我們完成了Ubuntu系統(tǒng)上Qt開(kāi)發(fā)環(huán)境的創(chuàng)建,可以開(kāi)始Qt程序的開(kāi)發(fā)了。
    發(fā)表于 02-09 16:18

    在Linux上部署Qt及Qwt的教程

    /local/qwt-6.1.3/lib/" -lqwt 至此,Qt+Qwt環(huán)境即在Linux上部署成功! 說(shuō)明一下,~./bashrc為bash的配置文件,在個(gè)文文件夾主目錄下,是一個(gè)隱藏文件。
    發(fā)表于 07-03 04:51

    如何進(jìn)行UbuntuQt嵌入式交叉編譯開(kāi)發(fā)環(huán)境搭建?

    如何進(jìn)行UbuntuQt嵌入式交叉編譯開(kāi)發(fā)環(huán)境搭建?
    發(fā)表于 09-11 02:42

    windows下虛擬機(jī)ubuntu+Qt開(kāi)發(fā)環(huán)境搭建的詳細(xì)過(guò)程

    ubuntu+Qt開(kāi)發(fā)環(huán)境搭建
    發(fā)表于 09-26 06:37

    使用Qt Creator提供的遠(yuǎn)程部署調(diào)試的方法

    使用Qt Creator遠(yuǎn)程調(diào)試部署應(yīng)用到嵌入式linux開(kāi)發(fā)板最近在調(diào)試開(kāi)發(fā)一款Cottex-A5的開(kāi)發(fā)板上的應(yīng)用,主要使用了Qt作為GUI開(kāi)發(fā)應(yīng)用,之前用Yocto搭建好系統(tǒng)發(fā)行版和主機(jī)交叉編譯
    發(fā)表于 11-05 07:20

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

    接安裝qt。本文介紹最普遍的部署方式,就是在pc端的ubuntu中交叉編譯庫(kù)源碼,然后上傳編譯好的庫(kù)到樹(shù)莓派,最后配置qt creator交叉編譯的kit來(lái)實(shí)現(xiàn)在pc端編譯自碼程序,上
    發(fā)表于 12-24 06:44

    如何搭建qt開(kāi)發(fā)環(huán)境?

    剛收到1043的板子,然后現(xiàn)在需要用到qt進(jìn)行程序開(kāi)發(fā),用的是你們的虛擬機(jī)ubuntu18,qt版本是5.6,請(qǐng)問(wèn)一下如何搭建qt開(kāi)發(fā)環(huán)境
    發(fā)表于 01-06 07:41

    如何安裝ubuntu18.04 QT開(kāi)發(fā)環(huán)境?

    如何安裝ubuntu18.04 QT開(kāi)發(fā)環(huán)境?
    發(fā)表于 03-04 06:12

    Qt快速入門(mén)手冊(cè)

    介紹了在ubuntu系統(tǒng)中安裝qt以及qt的基本使用
    發(fā)表于 06-14 16:05 ?34次下載

    Ubuntu系統(tǒng)Linux學(xué)習(xí)環(huán)境的配置方法

    一步步配置的各種環(huán)境就這樣離我而去了。 無(wú)奈必須重新安裝各種環(huán)境,便索性開(kāi)一blog記錄自己學(xué)習(xí)Linux的心路歷程。 第一blog就記錄下關(guān)于Ubuntu下Linux學(xué)習(xí)
    發(fā)表于 11-21 14:45 ?1473次閱讀

    英創(chuàng)信息技術(shù)Qt開(kāi)發(fā)環(huán)境的搭建介紹

    的Linux系統(tǒng)中搭建Qt應(yīng)用程序的開(kāi)發(fā)環(huán)境。這里采用的Linux系統(tǒng)為Ubuntu12.04,交叉工具鏈為arm-none-linux-gnueabi(版本號(hào)為4.4.1),Qt
    的頭像 發(fā)表于 01-17 09:12 ?1834次閱讀
    英創(chuàng)信息<b class='flag-5'>技術(shù)</b><b class='flag-5'>Qt</b>開(kāi)發(fā)<b class='flag-5'>環(huán)境</b>的搭建介紹

    嵌入式Linux開(kāi)發(fā)環(huán)境搭建-(5)安裝和配置Qt Creator開(kāi)發(fā)工具

    的運(yùn)行環(huán)境,后續(xù)的應(yīng)用程序開(kāi)發(fā),會(huì)涉及到嵌入式 QT 界面程序設(shè)計(jì),因此,在 ubuntu 環(huán)境下開(kāi)發(fā)QT應(yīng)用程序時(shí),需要使用
    發(fā)表于 11-02 11:51 ?10次下載
    嵌入式Linux開(kāi)發(fā)<b class='flag-5'>環(huán)境</b>搭建-(5)安裝和配置<b class='flag-5'>Qt</b> Creator開(kāi)發(fā)工具

    A40i應(yīng)用筆記 | Qt應(yīng)用程序開(kāi)發(fā)工具 Qt Creator的安裝及使用

    簡(jiǎn)介本文主要介紹Qt應(yīng)用程序開(kāi)發(fā)工具QtCreator的安裝及使用飛凌移植好的Qt的SDK來(lái)搭建Qt應(yīng)用程序開(kāi)發(fā)環(huán)境的方法。Ubuntu
    的頭像 發(fā)表于 02-25 10:03 ?1912次閱讀
    A40i應(yīng)用筆記 | <b class='flag-5'>Qt</b>應(yīng)用程序開(kāi)發(fā)工具 <b class='flag-5'>Qt</b> Creator的安裝及使用

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品