1. 程式人生 > >qt5.9.7 移植到qnx 7.0

qt5.9.7 移植到qnx 7.0

網上有一篇針對qt 4的 針對的是qnx6.6,很多配置引數也對應不上,總結一下我移植qt 5.9.7 到qnx7.0的過程

移植qt4.8到qnx

首先我的系統是Ubuntu 16.04.02 + qnx 7.0  + qt 5.9.7 

1.準備工作:

1.1 ubuntu 系統自行下載安裝, qnx7.0 自行配置安裝;

1.2 qt 5.9.7 原始碼包下載:

http://download.qt.io/archive/qt/5.9/5.9.7/single/ 

選擇qt-everywhere-opensource-src-5.9.7.tar.xz 

下載 原始碼解壓到你的某個目錄下面如 ~/Download/qt/qt-everywhere-opensource-src-5.9.7

 

1.3 配置 qnx 環境變數:

      如果你是bash環境,直接執行 source ~/qnx700/qnxdsp-env.sh 

然後執行echo $PATH 檢視 qnx環境變數是否設定成功

      如果 你像我用的zsh 環境,可以切換成bash 執行上面命令,我的做法是 vim ~/.zshrc 在最下面新增如下幾行
export QNX_HOST=/home/panda/qnx700/host/linux/x86_64
export QNX_TARGET=/home/panda/qnx700/target/qnx7
export MAKEFLAGS=-I/home/panda/qnx700/target/qnx7/usr/include
export QNX_CONFIGURATION=/home/panda/.qnx
export PATH=$PATH:/home/panda/qnx700/host/linux/x86_64/usr/bin:/home/panda/.qnx/bin:/home/panda/jre/bin
注意: 其中的路徑需要改為自己系統的安裝路徑

然後source ~/.zshrc

echo $QNX_TARGET 檢視qnx 環境變數是否設定成功

2. 編譯 qt

2.1 首先進到qt 原始碼目錄下配置 編譯選項 也可以新建個autoconfig.sh指令碼執行配置.

cd ~/Download/qt/qt-everywhere-opensource-src-5.9.7/

./configure -opensource -confirm-license -shared -release -xplatform qnx-armle-v7-qcc   -no-rpath -reduce-exports -system-sqlite -continue  -no-openssl -nomake examples -nomake tests -force-debug-info -separate-debug-info -prefix /opt/qt5.9.7

引數解釋 :

-opensource 建立開源版本的qt

-confirm-license自動確認許可

-release 發行版本

-shared 建立並連結QT共享庫

-xplatform 選擇交叉編譯目標板mkspec

-no-rpath 較難理解  不使用庫安裝路徑作為一個執行時庫路徑 

-reduce-exports 減少資訊列印

-system-sqlite 

-no-openssl   SSL,Security Socket Layer,是一個安全傳輸協議,在Internet網上進行資料保護和身份確認,而OpenSSL是一個開放原始碼的實現了SSL及相關加密技術的軟體包,在qt中,我們可以選擇直接支援,或者OpenSSL連結支援,這個引數也是為有需要者提供的。

-nomake 選擇不編譯某些模組

-continue  發生錯誤,編譯繼續,最後處理錯誤

-force-debug-info  即使在除錯版本中也進行優化 

-separate-debug-info 將除錯資訊到一個單獨的檔案

-prefix 預設安裝路徑


sudo make install  #make install 的時候出現問題,問題解決請參考文後
make  -j4 //大約編譯了1個小時(thinkpadT470)

 注意:qnx-armle-v7-qcc 是針對arm32位系統,由於專案需要,我特別編譯了aarchle64 和x86-64 位系統的 編譯成功

2.2 configure 配置完成

3. 將生成的庫拷貝到目標qnx 系統中

目標板中usr下新建qt5目錄 將生成的libs plugins和 qml 三個資料夾拷貝過來,為了避免軟連結問題,可以壓縮拷貝再解壓.

目標板設定qt的環境變數,可以寫到/etc/profile中,也可以自己寫個指令碼,執行應用程式的時候再載入;在profile 中新增如下

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/qt5/lib
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/qt5/plugins
export QT_PLUGIN_PATH=/usr/qt5/plugins
export QML2_IMPORT_PATH=/usr/qt5/qml

4. 在本機上新建一個qt-qnx 工程, 將生成的exe 拷貝到目標板,執行,會提示需要什麼庫,然後從交叉編譯的工具庫中拷貝過去.

具體的本機如何配置新編譯的qt-for-qnx 工具鏈在下一篇部落格中詳細介紹.同時介紹如何在目標板正確執行qt 程式以及中文的支援等.

附上鍊接:QNX7.0 平臺QT開發環境配置(詳細)

錯誤備註:
sudo make install。由於安裝到系統目錄/opt/qt5.9.7,所以加了sudo執行。就這步,出現了問題:
 make[1]: ntoarmv7-ranlib: Command not found
 檢索發現ntoarmv7-ranlib可以在系統的qnx PATH中找到,因為我已經把qnx 環境變數新增到了PATH中。
 那為什麼還提示說找不到ntoarmv7-ranlib呢?
 原因如下:
 1.我新增arm交叉編譯器目錄到PATH中是放在~/.zshrc裡的,這是使用者的配置檔案,我的使用者為panda。
 2.執行make install時,加了sudo字首,變成了root的工作環境和root的許可權。
 根據以上兩點,make install是在root下做的,而ntoarmv7-ranlib在panda使用者的工作環境中才能找到。所以產生了這裡的錯誤。
 那我既要取得root許可權,又要具有當前使用者yan的工作環境,怎辦呢?
 解決如下:
 執行make install之前,先用下sudo -i命令取得root許可權。然後再執行make install。
 su 和 sudo 的區別:
 1.共同點:都是root使用者的許可權;
 2.不同點:su僅僅取得root許可權,工作環境不變,還是在切換之前使用者的工作環境;sudo是完全取得root的許可權和root的工作環境。
 注意:sudo su切換到root時原使用者的環境變數也一併丟失。應使用sudo -i
 索性就手動新增PATH環境變數

export PATH=$PATH:/home/panda/Downloads/arm/gcc-linaro-arm-linux-gnueabihf-4.9/bin/
export QNX_HOST=/home/panda/qnx700/host/linux/x86_64
export QNX_TARGET=/home/panda/qnx700/target/qnx7
export MAKEFLAGS=-I/home/panda/qnx700/target/qnx7/usr/include
export QNX_CONFIGURATION=/home/panda/.qnx
export PATH=$PATH:/home/panda/qnx700/host/linux/x86_64/usr/bin:/home/panda/.qnx/bin:/home/panda/jre/bin
 然後make install,安裝成功

 

參考連結: 

http://community.qnx.com/sf/discussion/do/listPosts/projects.qt/discussion.general.topc27009  

https://blog.csdn.net/zxpcus/article/details/79310288 

https://wiki.qt.io/Building_Qt_for_QNX_Neutrino_OS