1. 程式人生 > >QT5.5移植到ARM全攻略

QT5.5移植到ARM全攻略

一、編譯

  1. www.qt.io下載原始碼,qt-everywhere-opensource-src-5.5.0
  2. 設定編譯器或者說平臺。編譯器是通過xplatform引數指定的,xplatform後面跟的引數實際上就時qtbase/mkspec下的資料夾的名字,這裡以linux-arm-gnueabi-g++為模板,拷貝這個資料夾,重新命名為arm-linux,然後修改這個資料夾裡的qmake.conf,修改後的內容如下:

    
    #  modifications to g++.conf
    
    QMAKE_CC                = arm-none-linux-gnueabi-gcc
    QMAKE_CXX               = arm-none
    -linux-gnueabi-g++ QMAKE_LINK = arm-none-linux-gnueabi-g++ QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ # modifications to linux.conf QMAKE_AR = arm-none-linux-gnueabi-ar cqs QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy QMAKE_NM = arm-none
    -linux-gnueabi-nm -P QMAKE_STRIP = arm-none-linux-gnueabi-strip

    這裡修改的就是交叉編譯器的名字,根據個人情況而定,我使用的是友善的編譯器。

  3. 配置。

    ./configure --prefix=/QT5.5 -no-c++11 -no-qml-debug -xplatform arm-linux -qt-freetype -no-opengl -qt-pcre -nomake tests -nomake examples -sysroot /opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/ -v

    這裡的arm-linux就上上面拷貝的資料夾的名字。這裡需要說明的是sysroot,指定了sysroot,編譯器就會到sysroot目錄去找標頭檔案和庫,否則就會去本機找,網上的移植過程基本都沒設定這個路徑,在qt的官網上可以找到這個說明http://doc.qt.io/qt-5/embedded-linux.html,設定了sysroot之後,這個目錄就是根目錄了,prefix是相對於這個目錄來安裝的,也就是說make install後,qt的庫安裝到了/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/QT5.5目錄下。這個配置可能會提示跟xcb相關的東西,按照提示安裝相關軟體即可。配置之後,qt會提示你加上-qreal float選項,這個是為了跟以前的相容,這裡沒有加,如果加上也沒問題,加上之後會碰到編譯上的一些問題,這個在編譯小節裡說明。
  4. 編譯。編譯過程中,碰到了幾個問題。
    • clock_gettime相關的錯誤。根據提示在原始檔所在目錄的Makefile裡,找到LIBS加上-lrt
    • 因為加了-qreal float引起的編譯問題,如果不加這個選項,就不存在這兩個問題。都在qpdf.cpp中,一個是qBound(0., stops.at(i).first, 1.);其中qBound定義如下:

      Q_DECL_CONSTEXPR inline const T &qBound(const T &min, const T &val, const T &max)
      { return qMax(min, qMin(max, val)); }

      qBound的3個引數是一樣的,而stops.at(i).firstqreal型別的,0.1.double型別的,而qreal型別被指定為了float型別,所以就造成了這種編譯問題,可以將stops.at(i).first強制轉換為double型別。
      另一個問題也在這裡檔案裡,是<<符號的過載問題,程式碼如下:

      QPdf::ByteStream s(&shader);
      s << "<<\n"
      "/ShadingType 2\n"
      "/ColorSpace " << (alpha ? "/DeviceGray\n" : "/DeviceRGB\n") <<
      "/AntiAlias true\n"
      "/Coords [" << start.x() << start.y() << stop.x() << stop.y() << "]\n"
      "/Extend [true true]\n"
      "/Function " << function << "0 R\n"
      ">>\n"
      "endobj\n";

      這個地方沒弄明白,ByteStream已經過載了qreal型別,提示是模糊的過載,有int或者char可以備選,將start.y()等強制轉換為int後編譯通過。
    • 因為配置的時候加了-no-opengl選項,在編譯qt3d的時候,需要用到opengl的模組,編譯不過。因為用不到opengl,所以將qt3d遮蔽掉。找到原始碼目錄下的qt.pro,遮蔽掉下面兩句話:

      addModule(qt3d, qtdeclarative qtimageformats)
      addModule(qtcanvas3d, qtdeclarative)

      用#號將這兩句話註釋掉就可以了。
  5. 安裝。make install

二、在目標板上執行

  1. 先編譯一個qt程式,在qtcreator的管理構建套件裡設定好QT Versions編譯器,這裡QT Versions要設定成安裝之後QT5.5的qmake路徑,本文裡是/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/QT5.5/bin/qmake這個路徑,編譯器就選/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-g++
  2. 將編譯好的QT5.5拷貝到目標板上,這裡放到/opt目錄下。
  3. 指定QT的執行平臺,這裡使用linuxfb,QT有幾種執行平臺,在官網上有說明http://doc.qt.io/qt-5/embedded-linux.html,這裡使用linuxfb,新建一個檔案setqtenv.sh,寫下如下內容:

    export QTDIR=/opt/QT5.5
    export QT_QPA_FONTDIR=$QTDIR/lib/fonts
    export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/
    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
    export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x600:mmSize=800x600:offset=0x0:tty=/dev/tty1

    如果不指定QT_QPA_FONTDIRQT就會到/QT5.5的路徑下去找字型,結果就找不到了。如果不指定QT_QPA_PLATFORM_PLUGIN_PATH,應用程式啟動的時候就會提示找不到linuxfblinuxfb是QT的一個外掛,可以在/opt/QT5.5/plugins/platforms/資料夾下看到一個libqlinuxfb.soLD_LIBRARY_PATH是指定庫的路徑,這個就不說了,最熟悉的東西了。QT_QPA_PLATFORM是指定平臺,fb指定framebuffer的裝置地址,具體的引數在官網上有說明參見上面給出的連結。然後執行source setqtenv.sh新增這些環境變數,至此,介面就可以顯示出來了。

三、支援觸控式螢幕

  1. 首先應用程式要連結ts庫,在qtcreator的工程檔案里加上LIBS += -lts
  2. 設定觸控式螢幕相關的環境變數,如下:

    export QT_QPA_GENERIC_PLUGINS=tslib
    export TSLIB_TSDEVICE=/dev/touchscreen-1wire
    export TSLIB_CALIBFILE=/etc/pointercal
    export TSLIB_CONFFILE=/etc/ts.conf
    export TSLIB_PLUGINDIR=/usr/lib/ts

    這個QT_QPA_GENERIC_PLUGINS引數在官網上沒找到說明,百度到的,在/opt/QT5.5/plugins/generic目錄下可以看到一個libqtslibplugin.so,剩下的就是tslib的配置了,這裡使用的是友善觸控式螢幕,tslib已經移植好了,如果沒有tslib的話,還需要移植tslib。至此,觸控式螢幕就可以使用了,直接執行./ArmTest就可以了,不需要加其他引數,這裡ArmTest是我的測試程式。


行者不止
[email protected]
QQ群:207139762
2015.11.20

相關推薦

QT5.5移植ARM

一、編譯 到www.qt.io下載原始碼,qt-everywhere-opensource-src-5.5.0 設定編譯器或者說平臺。編譯器是通過xplatform引數指定的,xplatform後面跟的引數實際上就時qtbase/mkspec下的資料夾的名字

C#微信公眾號5)--群發訊息時的openid對應的使用者是誰呢

有一個openid不屬於公眾號關注使用者的任何一位 在通過微信控制檯群發訊息後 將有一個Event為MASSSENDJOBFINISH的事件推送 對應的openid 他是誰呢 他的nickname是張三瘋 來自 中國 廣東 廣州 簽名是DayDayUpUp

Windows勒索病毒防範、解決方法

windowsxp 殺毒軟件 金山毒霸 下載地址 官方下載 【防禦措施建議】1、安裝殺毒軟件,保持安全防禦功能開啟,比如金山毒霸已可攔截(下載地址http://www.duba.net),微軟自帶的WindowsDefender也可以。2、打開Windows Update自動更新,及時升級

Linux一鍵安裝web環境(阿裏雲ECS服務器)

傳輸 80端口 掛載 iyu 使用 ftp服務 老版本 雲服務 linux服務 摘自阿裏雲服務器官網,此處 一鍵安裝包下載: 點此下載 安裝須知 1、此安裝包可在阿裏雲所有linux系統上部署安裝,此安裝包包含的軟件及版本為: nginx:1.0.15、1.2.5、1.4.

android屏幕適配的

屏幕分辨率 縮放 img 關系 我們 http 分辨 tro pix 一. 核心概念與單位詳解 1. 什麽是屏幕尺寸、屏幕分辨率、屏幕像素密度? 屏幕分辨率越大,手機越清晰 2. 什麽是dp、dip、dpi、sp、px?之間的關系是什麽? dip:Density

Linux編程之UDP SOCKET

應用場景 什麽是 vid 結構體指針 from 好的 conn 能力 cnblogs 這篇文章將對linux下udp socket編程重要知識點進行總結,無論是開發人員應知應會的,還是說udp socket的一些偏僻知識點,本文都會講到。盡可能做到,讀了一篇文章之後,大家對

大型ECShop安裝搬家升級錯誤問題最

item auth prototype c2c params 同時 return ping 屏蔽 【引子】 最近將ECShop框架網站從租用服務器搬家至阿裏雲,雖然模塊及功能上已經被修改的面目全非了,但基礎部分還在。 在這個過程中遇到了很多的WARNIN

win7下安裝Linux實現雙系統

ont c51 item itl command 桌面 ted current 輸入 最近剛剛把原來32位的系統給重新安裝成64位的win7旗艦版,但又想嘗試下Linux,於是在win7下安裝了Linux實現了雙系統,是ubuntu 12.04版本的,據說現在最新的14.

論文檢測省錢

5.1 bds 而且 用途 jpeg har -m 也有 一個 學校是使用的知網論文查重系統,如果去使用別的論文檢測系統不僅浪費錢而且他們之間的報告根本就沒有可比性,因為論文查重系統的不同它收錄的學術論文資源以及算法都是不同的所以結果有偏差才是正常的。因此很多學生也只能使用

maven教程

教程 bean 然而 mave 外部依賴 創建 包含 冗余 快照 maven教程全攻略 我們在開發項目的過程中,會使用一些開源框架、第三方的工具等等,這些都是以jar包的方式被項目所引用,並且有些jar包還會依賴其他的jar包,我們同樣需要添加到項目中,所有這些相關的ja

淘寶優惠券最!省錢

alt bsp 用戶 ima nload 粘貼 list 成功 推廣 工具/原料 淘寶APP 好券捕手APP 首先我們來說一下淘寶優惠券的由來! 淘寶優惠券分兩種 一、公開優惠券 用戶在淘寶店家店鋪就可以直接看到的優惠券 二、賣家用於淘客推廣的優惠券(這種券是不公開的

聯通老用戶換套餐奉上

移動電話 .html 詳細 模版 ges 操作 移動 聯系 等待  聯通互聯網套餐哪個好?近日,很多網友都在討論這個話題,越來越多老用戶通過聯通客服投訴,得以換用資費更加實惠的聯通互聯網套餐。   那麽到底聯通互聯網套餐要如何申請更換,今天就一起來看看聯通老用戶換互聯網套餐

【微軟大法好】VS Tools for AI(2)

port shell orf 方式 virt cnblogs 我們 玩耍 虛擬 接著上文,我們來討論如何使用Azure資源來訓練我們的tensorflow項目。Azure雲我個人用得很多,主要是因為微軟爸爸批了150刀每月的額度,我可以愉快地玩耍。 那麽針對Azure,有成

Vue.js——vue-resource

lam 類型 網絡 java 隱藏 header 做的 response scrip 概述 上一篇我們介紹了如何將$.ajax和Vue.js結合在一起使用,並實現了一個簡單的跨域CURD示例。Vue.js是數據驅動的,這使得我們並不需要直接操作DOM,如果我們不需要使用jQ

Perl Unicode

erl 結果 編程 國際 要求 locale intern 操作 自動 Perl Unicode全攻略 耐心看完本文,相信你今後在unicode處理上不會再有什麽問題。 本文

Windows 系統 Unicode 文件名操作(新建、重命名、枚舉、復制)

for overflow date col left 文件的 函數 參數 splay 常見的那些文件操作函數都不支持,於是為了達到目的,需要各種方法配合,應該是不如其他語言方便。我只是想看看Perl到底是否適合做這件事,於是折騰了一回。文件的建立: 模塊:Win32

【轉】Android Studio打包---從入門到精通

UC store 類型 安裝文件 public alt url tool 描述 原文地址:http://blog.csdn.net/zivensonice/article/details/51672846 初出茅廬 手動打包 怎麽手動打包 項目寫完了,現在需要把應用上傳

Andriod界面設計的分辨率和尺寸適配 轉載

復雜 分別是 太差 content 基礎 hdp art 發布 一點 Andriod界面設計的分辨率和尺寸適配全攻略 轉載 2016年09月27日 17:45:56 第一、屏幕尺寸: 一般表示是手機的實際物理尺寸,屏幕尺寸指屏幕的對角線的長度,單位是英寸,1英寸

axios 之基本介紹與使用(GET 與 POST)

pkg 需要 name comm xmlhttp 基本介紹 markdown pre spa axios axios 是一個基於 Promise 的 HTTP 客戶端,專門為瀏覽器和 node.js 服務 Vue 2.0 官方推薦使用 axios 來代替原來的 Vu

幹貨:微信營銷引流方法

同時 線下 網站發布 有一個 nag 消費 ffffff 分享圖片 傳統 很多人問我有沒有快速加粉絲的方法,經過幾天的總結整理,整理出如下多種微信營銷免費快速加粉秘籍,希望對大家有幫助,請切記,無論那一種方法只要你執行力好都會起到很好的效果。方法不在於多,而在於極致,一定要