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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章