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等文件值得打開看看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM