一、环境说明
-PC系统:ubuntu 14.04 x64
- 编译器:arm-none-linux-gnueabi-gcc4.8.3
- 开发平台:Cubieboard2-DualCard
- 开发板系统:cubieez-cb2-bootcard-v2.2
二、下载源码
QT源码官网下载:http://download.qt.io/official_releases/qt/5.5/5.5.1/single/
交叉编译器下载:http://pan.baidu.com/s/1nt46q2t
expat源码下载: http://sourceforge.net/projects/expat/files/expat/
dbus源码的下载:http://dbus.freedesktop.org/releases/dbus/
在移植QT同时,需要移植dbus库,而在移植dbus库前,需要安装expat,我使用的是expat-2.1.0和dbus-1.2.30
三、准备工作:
1. 配置交叉编译器
(1). 解压
tar -jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
对于解压后的文件夹,我将其改名为arm,然后使用命令cp -r arm/ /opt/将其移动到opt/目录下面。
(2).配置路径
使用命令vim /etc/profile
打开profile文件(如果没有vim的用vi也行,或者sudo apt-get install vim安装一个),在后面添加
export PATH=$PATH:/opt/arm/bin/
然后保存退出。使用命令
source /etc/profile
重启profile文件。在终端输入arm然后按Tab键,出现arm-none-linux-gnueabi-gcc-…等一些列提示则代表交叉编译器配置成功。
2.安装expat
(1). 解压
tar -zxvf expat-2.1.0.tar.gz
(2).配置
cd命令进入文件夹,输入:CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux--prefix=/opt/expat-2.1.0
其中prefix参数设置的是最后make install的安装路径,在这里即/opt/expat-2.1.0
假如出现错误:
checkingwhether the C compiler works... no
configure:error: in `/home/lipei/Desktop/expat-2.1.0':
configure:error: C compiler cannot create executables
See`config.log' for more details
可能是少了lib32z1
执行sudo apt-get install lib32z1再重新尝试。
(3).成功后执行make
(4).执行make install
3.安装dubs
(1). 解压
tar -zxvf dbus-1.2.30.tar.gz
(2).配置
cd命令进入文件夹,输入:CC=arm-none-linux-gnueabi-gcc ./configureCFLAGS=-I/opt/expat-2.1.0/include LDFLAGS=-L/opt/expat-2.1.0/lib--prefix=/opt/dbus-1.2.30 --host=arm-linux --enable-abstract-sockets
(3).执行make
(4).执行make install
(5)生成machine-id
执行命令dbus-uuidgen >/opt/EmbedRigol/install-dev/dbus-1.2.30/var/lib/dbus/machine-id
如果没有相应目录请按照错误提示将路径建立完整。
四、交叉编译QT
1.解压下载的源码
tar -zxvf qt-everywhere-opensource-src-5.5.1.tar.gz
2.修改qmake.cof
进入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 = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
QMAKE_INCDIR += /opt/dbus-1.2.30/include/dbus-1.0
QMAKE_INCDIR += /opt/dbus-1.2.30/lib/dbus-1.0/include
QMAKE_LIBDIR += /opt/dbus-1.2.30/lib
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)3.修改解压目录下的qt.pro文件
在文件中找到两行:
addModule(qt3d,qtdeclarative qtimageformats)
addModule(qtcanvas3d,qtdeclarative)
在前面添加#注释掉:
#addModule(qt3d,qtdeclarative qtimageformats)
#addModule(qtcanvas3d,qtdeclarative)
4. 配置编译参数
输入:./configure -release-opensource -xplatform linux-arm-gnueabi-g++ -prefix /opt/qt-5.5.1 -confirm-license -no-iconv -no-opengl -no-c++11 -dbus
-xplatform指定平台,也就是qmake 配置文件的文件夹名 linux-arm-gnueabi-g++
-prefix 后面跟编译后执行 make install 的安装路径
-confirm-license 相当于同意一个协议
-no-opengl 为了不编译 3d 参数,这里增加 ” -no-opengl ” 参数
-no-c++11 表示不用C++11的特性
如果提示:
Buildparts ............ libs examples
Mode ................... release
Using sanitizer(s)...... none
Using C++11 ............ no
Using gold linker....... no
Using new DTAGS ........ yes
Using PCH .............. yes
Target compiler supports:
Neon ................. no
……(此处省略中间部分)
SQL drivers:
DB2 .................. no
InterBase ............ no
MySQL ................ no
OCI .................. no
ODBC ................. no
PostgreSQL ........... no
SQLite 2 ............. no
SQLite ............... yes (plugin,using bundled copy)
TDS .................. no
tslib .................. no
udev ................... no
xkbcommon-x11........... no
xkbcommon-evdev......... no
zlib ................... yes (bundledcopy)
则配置成功。
5.执行make
编译,等待大概2个小时
6.执行make install
最终在/opt目录下会出现qt-5.5.1文件夹。
五、移植到开发板
1. 打包拷贝
(1)用
tar -jcvf qt-5.5.1.tar.bz2 qt-5.5.1
打包整个文件夹,然后复制到cb2文件系统的/opt目录下。使用命令
tar -jxvf qt-5.5.1.tar.bz2
解压。
(2)打包dbus-1.2.30文件夹,拷贝到cb2的/opt上解压,操作同(1)。
2.配置环境变量
vim/etc/profile打开开发板的/etc目录下的profile文件(没有vim用vi也行),在后面添加:
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/opt/qt-5.5.1/bin
export PATH
#set hostname
HOSTNAME='/bin/hostname'
export HOSTNAME
#Set PS1
PS1='[\u@\h\W]\$'
export PS1
#qt path
export QTDIR=/opt/qt-5.5.1
export LD_LIBRARY_PATH=/lib:$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event1
export QML2_IMPORT_PATH=$QTDIR/qml
保存后执行命令source /etc/profile重启文件。
3.拷贝库文件
(1)把PC上交叉编译器/opt /arm/arm-none-linux-gnueabi/libc 目录所有 .so 文件拷贝到开发板 lib 目录。
(2)把PC上/opt/arm /arm-none-linux-gnueabi-gcc/libc/usr/lib目录下的libstdc++.so.6和libstdc++.so.6.19拷贝到开发板的lib目录。
(3)把开发板上/opt/dbus-1.2.30/lib目录下的ibdbus-1.so、ibdbus-1.so.3、ibdbus-1.so.3.4.3拷贝到开发板的lib目录
4.在cb2上执行一下QT自带的案例程序
进入/opt/qt-5.5.1/examples/touch/pinzoom/pinchzoom下./pinchzoom执行程序。程序能运行则移植成功。由于之前qmake.conf中设定了QT_QPA_DEFAULT_PLATFORM =linuxfb所以程序是没有标题栏的。
参考自:http://blog.csdn.net/imhml1987/article/details/49666359