前陣子移植qt4.8.5到板子上成功後,總想着qt4有點舊,因而就想着玩qt5,以前都是在Windows7上寫qt,
寫了個遊戲,感受還不錯,但畢竟不能只能在PC機上跑,如今因爲項目須要,要將qt搞到IMX6板子上,其
中過程也不復雜,就是編譯qt太耗時間,因爲個人機器比較慢,編譯一個qt要兩個半鍾,你們的可能快些
要移植qt5.5.0到板子上,首先得準備幾樣東西
虛擬機VMware-workstation-full-12.1.0-3272444 我用的是這個
fedora鏡像:Fedora-Live-Workstation-i686-21-5.iso 有些人喜歡用ubuntu的也能夠
官網能夠下qt: qt-everywhere-opensource-src-5.4.0.tar.gz和qt-opensource-linux-x86-5.5.0.run
交叉編譯器:gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gzhtml
虛擬機的安裝和fedora21的安裝就不說了,通常都是一路暢通的,安裝好後調通網絡,我喜歡用橋接方式橋接到
windows7的無線網卡,這樣方便安裝軟件和遇到問題時安裝一些庫,用yum -y install xxx就能夠安裝,這裏不展開。
但在後期調試開發板的時候記得要橋接到有線網卡,才能和板子ping的通。linux
一、交叉編譯器的安裝
這個網上不少教程,再也不贅述。
二、qt的編譯
先mkdir /opt/qt5.5.0 用於後續安裝qt
將qt解壓後,執行cd qt-everywhere-opensource-src-5.5.0/
執行vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
在qmake.conf文件中添加
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
而且在編譯器名字arm後面添加none,下面是我修改後的,本身對照下
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublibc++
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)canvas
#下面三行是我添加的
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-aubuntu
# modifications to g++.conf
#下面八個都加上none
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++windows
# 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)
其實你用gedit也行,可能方便點。
而後vi qt.pro
將下面兩行註釋掉
#addModule(qt3d, qtdeclarative qtimageformats)
#addModule(qtcanvas3d, qtdeclarative)
咱們不用3d網絡
而後執行./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix /opt/qt5.5.0 -no-c++11 -no-opengl -dbus -no-iconv
注意要加上-no-iconv 和 -dbus 否則後續不少問題,其實也能夠解決,就是比較麻煩,後面的參數你們能夠用./configure -help
查看,上面註釋掉的兩行理論上也能夠用參數來屏蔽掉纔對,懶得找了。
配置成功後就執行make 等兩個鍾吧,這裏以前必定要配置好參數,我就是有些沒加上而後make了一個多鍾
而後報錯,白等了一個多鍾。make完成功後執行最後一步make install ,這個很快,幾分鐘的事情。app
下面就要開始調試了
先將剛安裝好的qt5.5.0打包
cd /opt/
tar czvf qt5.5.0.tar.gz qt5.5.0
而後就將壓縮包拷到U盤,放到板子上解壓到/opt下,也能夠用tftp下載,前提是要配好網絡
將qt5.5.0.tar.gz放到/var/lib/tftpboot下,開發板配好ip,用ifconfig eth0 172.19.19.230 netmask 255.255.254.0能夠
配開發板ip,個人fedora的ip是172.19.19.250,注意橋接到有線網卡,而且有線網卡配置好同網段的ip,開發板用
網線鏈接好筆記本。互相能ping通後執行tftp -g -r qt5.5.0.tar.gz 172.19.19.250
下載成功後一樣解壓到/opt下,之後寫qt程序常常須要調試,因此之後會極少用U盤,想一想每編譯一次就要用U盤拷到板子上,一天
要拔來拔去幾百回。因此用網絡下載是比較好的,但我的仍是喜歡用nfs掛載,nfs掛載方式這裏就不說了,本身去學,不難。測試
解壓好後就把變量導一下,在板子上vi /etc/profile
在後面添加
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_TSEVENTTYPE=input
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/input/event1
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATHui
export PATH=$TSLIB_ROOT/bin:$PATH
export QT_ROOT=/opt/qt5.5.0
export LD_LIBRARY_PATH=$QT_ROOT/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
結束。
TSLIB本身想辦法獲得吧,我這裏板子上有現成的,我就直接拿來用了。路徑要配對
不過我試了下,qt5不用tslib庫也能夠跑起來,qt4就不行。
測試下:cd /opt/qt5.5.0/examples/touch/fingerpaint/
./fingerpaint
結果報錯:
process 1053: D-Bus library appears to be incorrectly set up; failed to read machine uuid: Failed to open "/etc/machine-id": No such file or directory
See the manual page for dbus-uuidgen to correct this issue.
D-Bus not built with -rdynamic so unable to print a backtrace
Aborted
沒事,執行 dbus-uuidgen > /etc/machine-id從新來一次,成功了。。。若是遇到其餘什麼錯誤,能夠參考http://www.cnblogs.com/subo_peng/p/5577716.htmlqt-opensource-linux-x86-5.5.0.run就本身裝了。。