這篇是個人第二篇博客,呵呵。上次那篇發牢騷是我第一次寫博客。我選擇在開源中國社區寫博客,是由於這個上面日常有不少關於科技領域和程序員的資訊(新 聞),並且有不少技術資料和開源軟件唾手可得,下載也方便。最重要的是我喜歡看這個上面的評論,不論是噴子仍是噴噴子的噴子,都很又意思。額。。。我不是 打廣告,我只是表示一下本身的真是感覺,言歸正傳吧。linux
Qt4到5有不少變化的,首先元對象系統變了,Qt5的信號和槽基於模板了,而不是之前的字符串。這樣的話信號和槽的性能應該會提升不少。其實之前信號和 槽的也不慢,只是不少Qt反面的人老拿這個說事。Qt5的信號鏈接的槽能夠不用slot聲明,可是在這裏我有個問題,Qt的信號和槽是不能有函數參數默認 值的,有默認值我發現無論用,就是槽不響應信號,若是Qt5信號能綁定任意槽的話,不知道信號和槽參數默認值的話信號行不行。Qt5的Qtcreator 比之前的好用,調試方便。其餘的方面有不少改進,Qt5.5.0增長了qt3d和qtcanvas3d模塊,可是嵌入式的用不到,要用的話得有嵌入式平臺 的opengl。好了,我只能說這麼多了,下面來看Qt5.5.0編譯移植。android
個人系統是Ubuntu 14.04編譯器是arm-none-linux-gnueabi-gcc 4.8.3。在這裏,由於不少人(包括咱們公司)都用友善之臂的FriendlyARM編譯器,可是版本太舊了,arm-linux-gcc有bug,編譯的時候才知道有多坑,這裏我給個4.8.3的鏈接:http://www.veryarm.com/arm-none-linux-gnueabi-gcc進去下載最新的進行,或者網盤http://pan.baidu.com/s/1nt46q2t
ios
編譯:c++
第一步:下載qt-everywhere-opensource-src-5.5.0.tar.gz,這個Qt官方有。下載arm-none- linux-gnueabi-gcc。注意我給的這個鏈接。本身找資源下的話,不要下載gcc-arm-none-eabi,這個是給裸機嵌入式編譯用 的。程序員
第二步:解壓arm-none-linux-gnueabi-gcc,解壓完(文件夾名字是arm-2014.05,我改爲arm),直接複製/opt/下面了:shell
$ sudo cp arm /opt/canvas
第三步:配置環境變量,在Ubuntu14.04下面,切換到home目錄:windows
$ cd ~ $ vi .bashrc
在PATH後面添加$PATH:/opt/arm/bin/,若是沒有PATH,則添加一行:bash
export PATH=$PATH:/opt/arm/bin/
而後保存退出。讓環境變量生效。若是不會就註銷一下,再登陸會生效。
函數
第四步:找個英文目錄,把qt-everywhere-opensource-src-5.5.0.tar.gz放進去。用終端解壓:
$: tar -zxvf qt-everywhere-opensource-src-5.5.0.tar.gz
千萬別右擊提取到此處,這個解壓好像和命令解壓不一樣,反正右擊提取的,到編譯的時候你就知道有多坑了。我編譯搞了兩天兩夜,有幾回都是這個形成的。
第五步:修改編譯配置文件,在目錄:qt-everywhere-opensource-src-5.5.0/qtbase/mkspecs/linux-arm-gnueabi-g++/下面qmake.conf。(紅色是個人改動)改成:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linux #eglfs
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.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
load(qt_config)
第六步:在編譯以前,還有個改動,額。。。qt3d和qtcanvas3d在編譯的時候會報錯,說是未識別模塊,並且嵌入式的沒有opengl,識 別了也會報錯,致使編譯失敗,並且編譯配置參數裏面也沒有這兩個模塊的配置。個人解決方法簡單粗暴,在配置時參數加-no-opengl,而後打開qt- everywhere-opensource-src-5.5.0/qt.pro文件,找到:
addModule(qt3d, qtdeclarative qtimageformats) addModule(qtcanvas3d, qtdeclarative)
這兩行註釋掉(#號註釋),或者直接刪掉。若是不註釋掉,即便加了-no-opengl也會報錯,編譯失敗。
第七步:配置編譯參數,用./configre -help 能夠查看參數。個人配置是:
$./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix /opt/Qt-5.5.0/armv7-a -no-c++11 -no-opengl
注意:紅色部分是你的Qt庫將要安裝的位置,慎重,若是之後要裝那,就寫那。移動了位置,用的時候qmake找不到庫。雖然能夠配置,可是每一個工程 用的時候都得配路徑,很麻煩。參數中-no-c++11,表示不用C++11的特性,不加這個參數,可能編譯不過,-no-opengl表示沒有 opengl。我沒加參數-qreal float ,由於我發現,加上以後編不過。在編譯到.../qtbase/src/gui/painting/qpdf.cpp的時候會報錯。
第八步:若是上面配置沒有問題,接下來make:
$make
等兩個小時。。。
第九步:安裝:
$sudo make install
在這裏加sudo是由於,安裝時會將庫文件複製到上面第七步配置的安裝目錄(紅色的/opt/Qt-5.5.0/armv7-a ),opt目錄是須要root權限的。
第十步:編譯平臺插件,因爲Qt5之後,刪除了嵌入式的QWS(Qt windows system-Qt窗體系統)換成QPA(Qt Platform Abstration -Qt平臺抽象),平臺插件在qt-everywhere-opensource-src-5.5.0/qtbase/src/plugins /platforms/下面。有各類平臺的插件,基於frambuffer的插件是lunuxfb這個文件夾下,其餘的還有android、ios、 winrt、windows等等,須要什麼平臺的編譯就是了。QPA運行時要加參數,我還沒試,還不知道,網上有人用了能夠參考一下。
好了,這是我編譯Qt5.5.0的過程。這個我把qt3d和qtcanvas3d砍掉了。有人要問了,新功能都沒了,還不如用舊的。額。。。若是是Qt4 的話,仍是移植新的好。由於這個變化不是通常的大,頗有必要。Qt5的話,可能變化不大,可是Qt5.5.0聽說修復了1500個Bug。我一直沒編譯 Qt5.5.0之前的版本,一直在等,等的就是5.5.0,畢竟這是個大版本。