linux下qt编译arm版程序报错,QT 4.8.3嵌入式

最近买了块天嵌的TQ210,对最新的Qt4.8.3进行了移植,现在做个总结,方便以后查看。Qt是一个跨平台的C++应用程序开发框架,广泛用于开发GUI程序。使用Qt开发的软件,相同的代码可以在任何支持的平台上编译与运行,而不需要修改源代码。会自动依平台的不同,表现平台特有的图形界面风格。

Qt在嵌入式开发中有着广泛的应用,使用Qt只需编写一次应用程序和UI,无须重新编写源代码,便可跨不同的桌面和嵌入式操作系统进行部署,既节省了时间又降低开发成本。

0.编译环境

操作系统:Debian wheezy 32位

gcc版本: 4.7.1

arm-linux-gcc:4.4.6 (for TQ210 EmbedSky Tech)

开发板:TQ210(天嵌)

液晶屏:7寸(800×480)

1.安装tslib

为什么要装tslib?主要是为了校准触摸屏以及去抖等功能,为了能更好的使用触摸屏还是装吧。

下载地址: />

网上说的tslib1.4其实就是tslib1.0.4,怎么就变成1.4了,汗。。。这个工具比较小,配置一下后直接编译就行了。

tar-xvjf tslib-1.0.tar.bz2

cd tslib-1.0

./autogen.sh

./configure--prefix=/opt/tslib-1.0--host=arm-linux ac_cv_func_malloc_0_nonnull=yes

make

make install

prefix后面是安装目录,自己随便定义,装好后修改/opt/tslib-1.0/etc/ts.conf,去掉module_raw input 前面的#号,然后把/opt/tslib-1.0里的文件都拷入开发板,比如我放在了/usr/local里。再配置开发板的环境变量,让tslib能正常工作。

exportsetTSLIB_FBDEVICE=/dev/fb0

exportsetTSLIB_TSDEVICE=/dev/event4

exportsetTSLIB_CONFFILE=/usr/local/etc/ts.conf

exportsetTSLIB_CALIBFILE=/etc/pointercal

exportsetTSLIB_PLUGINDIR=/usr/local/lib/ts

运行/usr/local/bin中的ts_calibrate进行校准,成功的话会出现界面,并让你点击十字符号,完成后会生成/etc/pointercal文件,这是触摸屏的校准配置文件。 遇到的问题:

1.在autogen时出错,提示

./autogen.sh: 4: autoreconf: not found

这是因为系统没有安装automake,装上就行了。

aptitude install autoconf automake libtool

2.在make时出错,提示

In function ‘open’,    inlined from ‘main’ at ts_calibrate.c:229:11: /usr/include/bits/fcntl2.h:51:24: error: call to >‘__open_missing_mode’ declared with attribute error: open with >O_CREAT in second argument needs 3 arguments make[2]: *** [ts_calibrate.o] Error 1

这是因为open函数的语法不符合最新的gcc,在/tests/ts_calibrate.c中加入open的第三个参数:

if((calfile=getenv("TSLIB_CALIBFILE"))!=NULL){

cal_fd=open(calfile,O_CREAT|O_RDWR,0777);

}else{

cal_fd=open("/etc/pointercal",O_CREAT|O_RDWR,0777);

}

2.安装Qt4.8.3

为了开发方便,我们一般在PC端写好程序,仿真,调试完成后再用arm-linux-gcc编译成arm版的程序,最后拷到开发板上运行。所以我们必须编译两套Qt库文件:PC端的和arm端的。

2.1.安装Linux/X11版Qt

下载页面: />

选择Qt libraries 4.8.3 for Linux/X11得到qt-everywhere-opensource-src-4.8.3.tar.gz,这个和Qt libraries 4.8.3 for embedded Linux是同一个文件,配置不同就可以编译出不同的版本,所以我们下一个就行了,解压开,配置,make。

tar-xvzf qt-everywhere-opensource-src-4.8.3.tar.gz

cd qt-everywhere-opensource-src-4.8.3

./configure-prefix/opt/qt-4.8.3-x11

make

make install

因为库比较大,要编译好一段时间,完成后install,-prefix后面的是安装目录,根据需要修改。 在编译过程中出错,提示

g++: error: unrecognized command line option ‘-fuse-ld=gold’

这是Qt的一个bug:在装有gold linker的系统里,编译脚本会加入-fuse-ld=gold选项,但这个选项gcc是不支持的。解决办法是移除该选项,找到文件src/3rdparty/webkit/Source/common.pri,屏蔽QMAKE_LFLAGS+=-fuse-ld=gold。

# QMAKE_LFLAGS+=-fuse-ld=gold

2.2.安装embedded版Qt

源代码是一样的,重新配置就行了。

./configure -prefix /opt/qt-4.8.3-arm-embedded arm-release-shared-fast-no-largefile-qt-sql-sqlite-qt3support-no-xmlpatterns-no-glib-no-phonon-no-mmx-no-3dnow-no-sse-no-sse2-no-svg-webkit-qt-zlib-qt-libtiff-qt-libpng-qt-libjpeg-make libs-nomake examples-nomake docs-nomake demo-no-nis-no-cups-iconv-no-dbus-openssl-xplatform qws/linux-arm-g++-little-endian-qt-freetype-depths16,24,32-qt-gfx-linuxfb-qt-gfx-transformed-qt-gfx-multiscreen-no-gfx-vnc-no-gfx-qvfb-qt-kbd-linuxinput-no-kbd-qvfb-armfpa-no-mouse-qvfb-qt-mouse-linuxtp-qt-mouse-tslib-DQT_QLOCALE_USES_FCVT-I/opt/tslib-1.0/include-L/opt/tslib-1.0/lib

make

make install

配置选项要根据自己的硬件选取,这样编译出来的库文件才会比较小。装好后把目录下的imports、lib、mkspecs 、plugin文件夹拷到开发板上的/opt/Qt目录下,目录随便,和环境变量里的一致就行。然后配置开发板的环境变量,让他能找到Qt。

exportsetQTDIR=/opt/Qt

exportsetQPEDIR=/opt/Qt

exportsetLD_LIBRARY_PATH=$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH

exportsetQT_QWS_FONTDIR=$QTDIR/lib/fonts/

exportsetQWS_SIZE=800x480

exportsetQWS_DISPLAY="LinuxFb:mmWidth80:mmHeight120:0"

exportsetQWS_DISPLAY="LinuxFB:/dev/fb0"

exportsetQT_PLUGIN_PATH=$QTDIR/plugins/

exportsetQWS_KEYBOARD="TTY:/dev/tty1"

exportsetQWS_MOUSE_PROTO="TSLIB:/dev/event4"

exportPATH=$QTDIR/bin:$PATH

3.安装Qt Creator

Qt Creator是一个开发Qt程序的IDE,当然也可以完全用命令行进行开发,个人习惯而已。下载地址还是,选择下面的Qt Creator 2.6.0 for Linux/X11 32-bit,如果是64位系统,选择64位版本。下载得到qt-creator-linux-x86-opensource-2.6.0.bin,运行安装即可。

./qt-creator-linux-x86-opensource-2.6.0.bin

装好后配置qmake,进入工具->选项->构建和运行->Qt 版本,添加上面装好的X11和arm版的qmake,qmake在各自的bin文件夹里,结果如下图。

>%E6%B7%BB%E5%8A%A0%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E5%B7%A5%E5%85%B7%E9%93%BEGCCE%E3%80%82<img%20alt=4.Hello Qt

新建文件或工程->Qt Gui 应用->下一步,选上Embedded Linux,在详情里把x11的去掉(x11是PC上的),如下图。

>%E5%90%8E%E9%9D%A2%E7%9A%84%E4%BF%9D%E6%8C%81%E9%BB%98%E8%AE%A4%E5%B0%B1%E8%A1%8C%E4%BA%86%E3%80%82%E5%AE%8C%E6%88%90%E5%90%8E%E6%89%93%E5%BC%80%E7%95%8C%E9%9D%A2%E6%96%87%E4%BB%B6%EF%BC%8C%E6%B7%BB%E5%8A%A0%E4%B8%80%E4%B8%AAHello%20Qt%E7%9A%84Label%EF%BC%8C%E6%9E%84%E5%BB%BA->%E8%BF%90%E8%A1%8C%E3%80%82<img%20alt=

按照提示添加-qws再次运行。

./Hello_Qt-qws

成功,查了一下,原来Qt的运行需要有一个Qt的服务进程,添加-qws后就是把当前Qt程序当作server了。 至此,Qt移植全部完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值