前言
近期因參與開發(fā)的某個軟件需要適配銀河麒麟v10arm 平臺,于是自己搭建起一套Qt 開發(fā)環(huán)境,在此記錄下具體過程,以供有需要的朋友參考。一開始手上并沒有Arm架構(gòu)的PC,先在Windows下用Vs2017和QtCreator 開發(fā),軟件開發(fā)快結(jié)束的時候Arm PC到了。Qt 沒有提供可直接安裝的arm架構(gòu)安裝包,只能自己通過編譯Qt 來搭建開發(fā)環(huán)境。
1.源碼下載
下載Qt5.12.7,從這里下載Qt5.12.7 。一定要選擇后綴為.tar.xz的源碼包,zip源碼包親測編譯時會遇到奇怪的問題。
2.編譯安裝
2.1 安裝依賴
- 安裝OpenGL依賴
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libegl1-mesa-dev
sudo apt-get install freeglut3-dev
2.2 編譯
打開終端,cd到源碼所在目錄,執(zhí)行configure程序并make,這里以編譯release版本為例
./configure -prefix /opt/qt5.12.7 -opensource -release -nomake tests -skip qtvirtualkeyboard
接著執(zhí)行make 命令
make -j4
2.3 遇到的問題
編譯過程遇到了一些問題,記錄如下
1)問題一
/usr/bin/ld.gold:錯誤:cannot find -lclip2tri
/usr/bin/ld.gold:錯誤:cannot find -lpoly2tri
/usr/bin/ld.gold:錯誤:cannot find -lclipper
該問題的原因是qtlocation模塊未編譯完整,重新執(zhí)行 make -j4 module-qtlocation 命令 可消除此錯誤,也可以在執(zhí)行configure命令的時候添加 -skip qtlocation 來跳過編譯。
2)問題二
xcb-xfixes development package not found
這個問題的解決方式是安裝對應的軟件包,執(zhí)行下面的命令來安裝,安裝之后重新執(zhí)行 make -j4。
sudo apt-get install libxcb-util0-dev
2.4 安裝
除此之外還有其他一些小問題,根據(jù)錯誤提示就能解決,沒記錄下來。
make 結(jié)束之后,執(zhí)行 sudo make install
命令,會將編譯好的Qt開發(fā)環(huán)境安裝到之前設(shè)置的目錄下 /opt/qt5.12.7 。
3.編譯qtwebengine
qtwebengine是后期需要引入echarts時才編譯的,編譯過程中也遇到了一些奇怪的問題,特在此記錄下來備忘。qtwebengine需要用到qmake及Qt的一些核心庫,因此必須先確保第3節(jié)中的qt編譯完成。
3.1 安裝依賴庫
sudo apt-get install bison build-essential gperf flex libasound2-dev\
libcups2-dev libdrm-dev libegl1-mesa-dev libnss3-dev libpci-dev\
libpulse-dev libudev-dev nodejs libxtst-dev gyp ninja-build\
libssl-dev libxcursor-dev libxcomposite-dev libxrandr-dev
在安裝 libnss3-dev 時報錯,大概意思是版本不對,使用sudo apt-get install libnss3-dev = xxxversion ,安裝成功。錯誤如下:
ibnss3-dev : 依賴: libnss3 (= 2:3.49.1-1kylin1.5) 但是 2:3.49.1-1kylin1.6 正要被安裝
解決方法,安裝指定版本的依賴包:
sudo apt-get install libnss3=2:3.49.1-1kylin1.5
3.2 編譯
打開終端, cd 到 src/qtwebengine 目錄下,執(zhí)行命令:
../qtbase/bin/qmake qtwebengine.pro
3.3 遇到的問題
- gperf not found
執(zhí)行完qmake 命令后報錯:gperf not found,以為gperf 沒有安裝成功,再次使用apt-get 安裝缺少的依賴,sudo apt-get install gperf ,安裝完成后需要將configure命令生成的緩存清除掉然后重新執(zhí)行configure 命令,并再次執(zhí)行qmake,命令如下:
rm config.cache
./configure -prefix /opt/qt5.12.7 -opensource -release -nomake tests -skip qtvirtualkeyboard
../qtbase/bin/qmake qtwebengine.pro
make -j4
-
X11/Xlib-xcb.h 找不到
不出意外開始編譯了,經(jīng)過漫長的等待,編譯又出錯了,這次遇到的是:fatal error X11/Xlib-xcb.h 文件不存在。第一感覺是缺少對應的庫,經(jīng)過一番查找發(fā)現(xiàn)需要安裝 libx11-dev ,于是執(zhí)行 sudo apt-get install libx11-dev,成功安裝后仍然報錯。通過find命令查找該頭文件,確實沒有找到 find /usr -name Xlib-xcb.h 。 我耐著性子查詢了很多資料還是沒能解決問題,這時只剩下最后一條路了,那就是下載libx11-dev源碼,從libx11地址下載系統(tǒng)libX11版本對應的libx11-dev源碼后,與當前系統(tǒng)/usr/lib/include/X11 目錄進行比較發(fā)現(xiàn)系統(tǒng)重確實少了Xlib-xcb.h 文件,而下載的源碼中剛好有這個文件,于是將 Xlib-xcb.h 復制到 /usr/lib/include/X11 目錄下,重新執(zhí)行 make -j4 繼續(xù)編譯。 -
libXlib-xcb.so 找不到
又是漫長的等待過后報了一個錯,這次是 libXlib-xcb.so 找不到,通過find命令發(fā)現(xiàn)在 /usr/lib/arm-linux-gnueabihf/ 目錄下有這個庫,根據(jù)報錯信息提示在/usr/lib/aarch64-linux-gnu/ 目錄下創(chuàng)建了一個 軟連接 ln -s /usr/lib/arm-linux-gnueabihf/libXlib-xcb.so libXlib-xcb.so, 接著再次執(zhí)行make -j4 ,這次沒有提示libXlib-xcb.so 找不到,而是提示libXlib-xcb.so 不兼容。 -
libXlib-xcb.so 不兼容
針對這個問題,我打算重新編譯libXlib 庫。首先安裝libtool 和 autoconfig
sudo apt-get install libtool autoconf
切換到libXlib 源碼根目錄下 執(zhí)行
./autogen.sh
configure.ac:24: error: must install xorg-macros 1.15 or later before running autoconf/autogen
下載對應的 rpm 安裝包,下載地址
sudo rpm -ivh xorg-x11-util-macros-1.19.3-4.el9.noarch.rpm --nodeps --force
安裝后再次執(zhí)行
./autogen.sh
make
編譯結(jié)束后會生成libXlib-xcb.so ,把庫拷貝到/usr/lib 目錄下, 刪除之前創(chuàng)建的 /uar/lib/aarch64-linux-gnu 目錄下的軟連接,重新創(chuàng)建對應的軟連接,然后回到qtwebengine 根目錄下再次 執(zhí)行 make -j4
-
open CFI at the end of file; missing .cfi_endproc directive
這個問題是qtwebengine 編譯過程中由于占用內(nèi)存太多,而系統(tǒng)內(nèi)存不足導致的報錯。我用的設(shè)備內(nèi)存是8G,交換空間是9G,為了解決這個問題將交換空間增加了20G,最終才編譯成功。
以下是增加交換空間用到的幾個命令:
#創(chuàng)建swap文件
mkdir -p /var/cache/swap
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=1G count=20
#轉(zhuǎn)換swap文件
sudo mkswap -f /var/cache/swap/swap0
#激活swap文件
sudo swapon /var/cache/swap/swap0
#卸載
sudo swapoff /var/cache/swap/swap0
#永久生效
sudo vim /etc/fstab
#寫入以下內(nèi)容:
/var/cache/swap/swap0 none swap defaults 0 0
再次執(zhí)行make -j4這次成功生成了 libQt5WebEngine 等幾個qtwebengine 用到的庫。
3.4 安裝
在qtwebengine 根目錄下執(zhí)行sudo make install
,生成的庫會自動安裝到/opt/qt5.12.7目錄下。
4.配置開發(fā)環(huán)境
首先在軟件商店中下載并安裝QtCreator,安裝完成之后配置QtVersion 、編譯器、Kits等。可以參考這篇文章配置鏈接
5.測試
新建一個項目,運行測試。這里遇到一個問題,程序可正常編譯運行,但是源碼文件確報錯 unexpected class name,這是因為缺少一個軟件包,通過安裝這個軟件包解決了此問題,安裝命令如下:
sudo apt-get install libclang-common-8-dev
安裝完成后重啟QtCreater,不會再出現(xiàn)上面的問題了。
6.程序無法輸入中文的問題
經(jīng)過查詢發(fā)現(xiàn)是插件問題,自己編譯的qt開發(fā)環(huán)境中缺少插件 libfcitxplatforminputcontextplugin.so,這里有兩個辦法解決這個問題,一個是下載源碼自己編譯該插件,另一個是在系統(tǒng)中找到這個插件,并拷貝到對應的插件目錄中。這里采用第二種方式解決了該問題,如果第二種方式不能解決,那就嘗試用第一種方式自己編譯插件吧。文章來源:http://www.zghlxwxcb.cn/news/detail-650792.html
總結(jié)
從零開始搭建麒麟系統(tǒng)arm平臺下的Qt開發(fā)環(huán)境還是挺折磨人的,在這個過程中會遇到很多新的問題,只有自己動手實踐一遍才能真正體會。我把完整的qt環(huán)境上傳到git上了,如果你也剛好需要而又不想折騰的話可以直接下載使用。下載地址:https://download.csdn.net/download/zheng19880607/88241689
以上就是本篇的所有內(nèi)容了,歡迎評論區(qū)留言討論!??!文章來源地址http://www.zghlxwxcb.cn/news/detail-650792.html
到了這里,關(guān)于Qt5開發(fā)環(huán)境-銀河麒麟V10ARM平臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!