1. 程式人生 > 其它 >arm板載ubuntu18.04系統安裝QT4.8.7

arm板載ubuntu18.04系統安裝QT4.8.7

1,安裝緣由

原來有個QT應用程式,在ubuntu12.04虛擬機器中編譯,然後執行在X86架構的32位ubuntu12.04作業系統中。

因眾所周知的缺貨原因,需要變更部署條件為:基於RK3288處理器的arm板載ubuntu18.04 64位系統(以下簡稱“新平臺”)。

  • l 處理器:瑞芯微RK3288
  • l CPU架構Cortex-A17
  • l CPU頻率1.8GHz
  • l GPU型號ARM Mali-T764
  • l GPU頻率600MHz
  • l 內 存64bits,DDR3L, LPDDR2, LPDDR3
  • l 作業系統:ubuntu18.04 64位

由於硬體架構變化,以前編譯的QT應用程式(以下簡稱“程式Q”)顯然無法在新平臺上直接使用,在命令列啟動,返回如下錯誤:無法執行二進位制檔案: 可執行檔案格式錯誤。

因此需要在新平臺上建立編譯環境,重新編譯原始碼,生成可執行檔案。

由於採用QT4.8.7版本的原始碼編譯QT開發環境,主要工作就是圍繞QT4.8.7版本的原始碼編譯展開,其它工作都是為了實現這個目標。

2,安裝步驟

筆者對QT和ubuntu系統均不熟悉,經過近半個月的摸索,查閱網上資料不斷實踐,踩過無數坑,終於安裝成功。總結為如下步驟:

1) 安裝中文語言支援。

2) 安裝vnc遠端桌面。

3) 編譯QT4.8.7原始碼

4) 安裝QTCreator

5) 編譯程式Q原始碼

6) 執行測試程式Q

3,安裝中文語言支援

首先宣告第一個坑,供應商提供的源千萬別隨意更改。

由於大部分軟體安裝都通過apt進行,為提高下載速度,可能會把/etc/apt/sources.list中的源改為國內阿里或清華的源。但是注意,大部分網上公開的源都是X86架構的系統才能使用的,對於ARM架構並不適用。因此特別要注意,應堅持使用供應商給的原配配置,否則一旦更改源,apt安裝軟體不是找不到軟體,就是出現各種錯誤。

供應商給的ubuntu系統是英文語言,第一步需要安裝中文支援。包括中文語言包和中文輸入法兩項工作。

本人在安裝中文語言包時,無法通過ubuntu系統設定介面配置成功,但通過命令列操作設定成功:

sudo apt-get install language-pack-zh-hans

sudo apt install $(check-language-support)

 

編輯home/.bashrc 檔案,加入LANG="zh_CN.utf8"

接著安裝中文輸入法,步驟如下:

1:安裝ibus框架 sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4

2:啟動ibus框架:im-config -s ibus

3:安裝拼音引擎:sudo apt-get install ibus-pinyin

4:設定ibus框架:sudo ibus-setup -》在input method 裡新增 剛剛加入到chinese-pinyin.

5:新增輸入法:system settings...-》Text Entry,勾選show current input source in the menu bar前面的勾,在左面右上角就可以選擇輸入法了。

4,安裝vnc遠端桌面

先安裝遠端控制軟體。以便操作。可參考:

https://blog.csdn.net/kldyutou/article/details/86129634?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

sudo apt-get install vnc4server

vncserver

sudo apt-get install xfce4

編輯 home/.vnc/xstartup檔案

reboot 命令 重啟作業系統, 並且重新啟動vncserver 然後 vncview遠端連線成功。

5,編譯前的準備

編譯QT原始碼前,需要準備好gcc,g++編譯工具。

執行:

sudo apt-get install build-essential

然後,要調整gcc版本,系統預設的gcc和g++版本太高,為7.5,需要調整為4.8版。詳見:

https://www.freesion.com/article/7546587104/

切換g++和gcc的版本的具體步驟:

sudo apt-get update

sudo apt-get install gcc-4.8

sudo apt-get install g++-4.8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 20

然後執行g++ -v,如果看到版本為4.8.X,就OK了。

然後安裝X11依賴庫:

sudo apt-get install libx11-dev libxext-dev

sudo apt install libxrandr-dev

再安裝mysql支援:

sudo apt-get install libmysqlclient-dev

再安裝fontconfig支援:

sudo apt-get install libfontconfig1-dev

6,下載並修改QT配置

下載地址:

https://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz

用tar命令解壓後,位於/home/ztl/Downloads/qt-everywhere-opensource-src-4.8.7/目錄。

首先,修改/home/ztl/qt-src-4.8.7/mkspecs/linux-arm-gnueabi-g++\qmake.conf檔案。為何要修改這個檔案呢?因為arm板的編譯環境為linux-arm-gnueabi-g++,修改qmake.conf如下:

  • l 將所有arm-linux-gnueabi-g++替換為g++
  • l 將所有arm-linux-gnueabi-gcc替換為gcc

為何要做以上修改呢?因為檔案中的arm-linux-gnueabi-g++和arm-linux-gnueabi-gcc命令不存在,系統命令實際上是g++和gcc。如果不改名,在後續的操作中將出現錯誤。

其次,檢查程式碼中對QT_BUILD_KEY的定義。

修改/home/ztl/Downloads/qt-everywhere-opensource-src-4.8.7/src/corelib/global/ qglobal.h

將其中的#define QT_BUILD_KEY "arm linux arm-gnueabi-g++ no-pkg-config"

一行中的arm-linux-gnueabi-g++替換為g++,修改原因同上。

如果不修改,那麼QT程式執行時可能會遇到以下錯誤:

"The plugin '/usr/local/Trolltech/Qt-4.8.7/plugins/sqldrivers/libqsqlmysql.so' uses incompatible Qt library. Expected build key "arm linux g++-4 no-pkg-config", got "arm linux arm-gnueabi-g++ no-pkg-config""

7,配置QT

執行如下配置:

./configure -release -shared -fast -opensource -no-3dnow -no-openssl -no-libmng -no-opengl -no-qvfb -no-glib -no-phonon  -no-qt3support -nomake examples -nomake tools -nomake docs -nomake demos -nomake test -no-openssl -qt-sql-sqlite -qt-sql-mysql -I/usr/include/mysql -L/usr/lib/arm-linux-gnueabihf -plugin-sql-mysql -qt-libjpeg  -qt-freetype -qt-freetype -qt-libpng -platform linux-arm-gnueabi-g++ -fontconfig -confirm-license -xrender -v

注意:

  • l 不要加入webkit和qt-zlib選項。否則後續make時出現錯誤。
  • l 需要webkit模組時,可以在後面單獨make。
  • l 如果程式涉及中文字型,必須帶引數-fontconfig
  • l 如果程式涉及SQLite3,必須帶引數-qt-sql-sqlite
  • l 如果程式涉及MYSQL,必須帶引數-qt-sql-mysql -I/usr/include/mysql -L/usr/lib/arm-linux-gnueabihf -plugin-sql-mysql
  • l platform是個非常重要的引數,要根據實際情況選擇。一般ARM採用linux-arm-gnueabi-g++,網上有些文章採用qws/ linux-arm-gnueabi-g++的。

Configure執行完畢後,要留意mysql、xrender、fontconfig等選項是否enable。如果失敗,必須先修改,然後再make。否則make/ make install以後,QT程式也不能正常執行。如以下是正常支援資訊:

FontConfig support ..... yes

8,編譯、安裝QT

執行 make -j4命令

然後就是漫長的等待。

如果沒有錯誤導致make中止,那麼就執行 make install命令,預設安裝QT環境到/usr/local/Trolltech/Qt-4.8.7/目錄下。

9,單獨make webkit模組

首先要注意,以下方式產生的libQtWebKit.so檔案與QT4.8.7不相容,不能使用,必須從QT4.8.7的原始碼中編譯才行。

  • l 系統自帶的/usr/lib/arm-linux-gnueabihf/libQtWebKit.so檔案
  • l 通過apt install libqtwebkit-dev安裝
  • l 通過apt install libqtwebkit4安裝

QT支援單獨make某個模組,如webkti,mysql。這樣便於靈活配置需要的模組。

Webkit模組的make非常耗時,且容易出錯。

首先發出配置指令:

./configure -opensource -confirm-license -release \

-webkit \

-nomake demos -nomake examples -nomake tools -nomake test -fast

然後進入webkit目錄

cd /home/ztl/Downloads/qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source

再為webkit建立單獨的make檔案

qmake WebKit.pro -r -spec /home/admin/Downloads/qt-everywhere-opensource-src-4.8.7/mkspecs/linux-arm-gnueabi-g++

執行 make -j4命令

最後,make install,在/usr/local/Trolltech/Qt-4.8.7/lib目錄下就會新增libWebKit.so。

10,安裝程式Q需要的庫檔案

此步驟是程式Q的需求,其它場景不一定需要。

sudo apt install libqjson-dev
sudo apt install libqrencode-dev

11,安裝QTCreator

https://download.qt.io/網站上,找不到一個適合本平臺使用的安裝版執行檔案。

直接採用apt安裝。先檢視可用版本為4.5.2:

sudo apt-cache  madison qtcreator

再採用sudo apt-get install qtcreator直接安裝

安裝完後,可以正常啟動qtcreator。

12,總結

經過以上步驟,程式Q在新平臺上可以正常編譯和運行了。此處上圖一張:

總結經驗如下:

  • l 遇到問題,多查資料多問多實踐,“三多”幫你渡過難關。在此感謝幫助的個人和網友。
  • l 對於QT原始碼編譯,需要非常重視準備工作。Linux系統各種環境依賴都需要手工配置。
  • l QT的configure引數值得花時間去研究,其生成的pro,makefile等檔案值得開啟看看。