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等檔案值得開啟看看。