QT4.8.6移植到TQ2440

交叉编译器用的是arm-linux-gcc4.3.2。
1.安装依赖: sudo apt-get install libX11-dev libXext-dev libXtst-dev
2.下载:qt-everywhere-opensource-src-4.8.6.tar.gz,网址:http://download.qt.io/archive/qt/
3.解压: tar zxf qt-everywhere-opensource-src-4.8.6.tar.gz
4.配置:编写auto_config.sh脚本,内容如下:
#!/bin/sh
./configure \
-prefix /home/yuntaohe/work/TQ210/QT4.8.6 \
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-depths 16,18,24,32 \
-fast \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-qt-libpng \
-qt-freetype \
-little-endian -host-little-endian \
-no-qt3support \
-no-libtiff -no-libmng \
-no-opengl \
-no-mmx -no-sse -no-sse2 \
-no-3dnow \
-no-openssl \
-no-webkit \
-no-qvfb \
-no-phonon \
-no-nis \
-no-opengl \
-no-cups \
-no-glib \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-nomake examples -nomake tools -nomake docs \
-qt-mouse-tslib \
-I/home/yuntaohe/work/TQ2440/tslib/tmp/include \
-L/home/yuntaohe/work/TQ2440/tslib/tmp/lib

增加脚本的可执行权限, chmod +x auto_config.sh,进入qt目录,执行脚本:
cd qt-everywhere-opensource-src-4.8.6/
./auto_config.sh,报错:
make: g++: Command not found,解决方法:apt-get install build-essential
5.编译:make -j8,编译一段时间后报错:
undefined reference to `__sync_sub_and_fetch_4'
collect2: ld returned 1 exit status
make[1]: *** [../../lib/libQtScript.so.4.8.6] Error 1
make[1]: Leaving directory `/home/yuntaohe/work/TQ210/qt-everywhere-opensource-src-4.8.6/src/script'
make: *** [sub-script-make_default-ordered] Error 2

解决方法:下载gcc-4.4.3源码,解压后,在gcc/config/arm目录下存在linux-atomic.c,将其编译为库文件。
cd gcc/config/arm
libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c
libtool --tag=CC --mode=link arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo

libtool工具如果不存在,安装即可: sudo apt-get install libtool
完成后,会在gcc/config/arm目录下生成.libs目录,拷贝liblinux-atomic.a至qt源码的lib目录,修改QT的src/script/Makefile,在19行的LIBS = $(SUBLIBS)结尾加上 -llinux-atomic,保存,继续make即可。
6.安装: make install,完成后会在安装目录/home/yuntaohe/work/TQ210/QT4.8.6下生成如下目录:
bin  demos  examples  imports  include  lib  mkspecs  plugins  translations。
将lib和plugins目录复制到开发板的文件系统: cp lib/* rootfs/lib -rf -d,cp plugins rootfs -rf
7.设置环境变量**: vim ~/.bashrc,在文件尾加上环境变量路径,保存后执行 source~/.bashrc
export QTDIR=/home/yuntaohe/work/TQ210/QT4.8.6
export LD_LIBRARY_PATH=/home/yuntaohe/work/TQ210/QT4.8.6/lib
export PATH=$QTDIR/bin:$PATH

8.程序验证:vim main.cpp,输入如下代码:
#include <QApplication>
#include <QDebug>

int main(int argc,char *argv[])
{
    qDebug("Hello, welcome to Qt world!");
    return 0;
}


依次执行 qmake -project -o main.pro , qmake, make生成应用程序main。将main可执行程序拷贝开发板文件系统,在开发板的/etc/profile设置环境变量。
#export QWS_MOUSE_PROTO=Tslib:/dev/event0
#export QWS_MOUSE_PROTO=MouseMan:/dev/mice
export QWS_MOUSE_PROTO="Tslib:/dev/event0 intelliMouse:/dev/mice"
export QT_QWS_FONTDIR=/lib/fonts                                 
export POINTERCAL_FILE=/etc/pointercal
export QWS_SIZE=480x272

重启开发板,执行应用程序:./main,输出Hello, welcome to Qt world!
让QT支持触摸屏,设置环境变量 export QWS_MOUSE_PROTO=Tslib:/dev/event0
让QT支持USB鼠标,设置环境变量 export QWS_MOUSE_PROTO=MouseMan:/dev/mice
让QT同时支持触摸屏和USB鼠标,设置环境变量 export QWS_MOUSE_PROTO="Tslib:/dev/event0 intelliMouse:/dev/mice"
在使用触摸屏和USB鼠标前,需要配置内核支持触摸屏和USB鼠标,配置内核对触摸屏的支持,在移植tslib1.4时已经提到,配置内核支持USB鼠标方法如下:
make menuconfig
Device Drivers  --->
    [*] HID Devices  --->
        <*>   USB Human Interface Device (full HID) support

QT程序在启动时,会出现鼠标,如果想让鼠标不显示,有3种解决方法:
1.在运行程序时,加上-nomouse选项,但是会导致触摸屏失效,无法使用。
2.在实例化QApplication对象后,调用QWSServer::setCursorVisible(false);调用之前需要包含头文件#include <QWSServer>。这种方法有个缺点,就是程序一开始,屏幕的中间会出现一个绿色的小方块,然后再出现一个白色的鼠标,之后小方块和鼠标都会消失,从鼠标出现到消失,时间在1秒左右,导致不美观。
3.在编译QT之前,配置QT时,加上-no-feature-CURSOR选项即可,这样程序在启动时,不会出现绿色的小方块,也不会出现鼠标,而且触摸屏也可以正常使用。

如果QT中要显示图片或者动画,需要在程序的一开始指定QT的plugins目录所在的路径,即 QApplication::addLibraryPath("/plugins");在plugins目录下面的imageformats目录,存放有QT对图像的解码库。

在QTCreator中开发QT程序配置如下:
1.切换到Qt Versions页,点击Add,选择qmake路径,这里是/home/yuntaohe/work/TQ210/QT4.8.6/qmake,选择完后,Version name会自动填充,这里是Qt %{Qt:Version} (QT4.8.6),点击Apply保存。
2.切换到Compilers页,点击Add,选择GCC,Name栏填入编译器名称GCC(ARM),再点击Brouse选择编译器路径,这里是/home/yuntaohe/work/TQ2440/arm-linux-gcc/4.3.2/bin/arm-linux-g++,点击Apply保存。
3.Tools->Options,左侧选择Build & Run,切换到Kits页面,点击Add,在下面的Name栏输入名称TQ2440 Qt 4.8.6(qte-arm),Compiler栏选择GCC(ARM),QT version栏选择QT 4.8.6(QT4.8.6),点击Apply保存。

编译tslib时,指定了CC环境变量,在编译QT的时候,需要清除该环境变量:unset CC,否则在编译的时候会报错:
/usr/bin/ld: /home/yuntaohe/work/qt-everywhere-opensource-src-4.8.6/src/tools/bootstrap/libbootstrap.a(compress.o): Relocations in generic ELF (EM: 40)

配置QT的时候,如果指定了-webkit,编译的时候会报错:
../3rdparty\javascriptcore\JavaScriptCore/wtf/TypeTraits.h:173:69:error: 'std::tr1' has not been declared
解决方法:修改QT源码目录下mkspecs/qws/linux-arm-g++/qmake.conf文件,加上一行:QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98

运行QT程序时,如果报错:QFontDatabase: Cannot find font directory /home/yuntaohe/work/iMX6Q/QT5.4.0/lib/fonts - is Qt installed correctly?
只需要在配置QT的时候加上-no-rpath选项即可。


编译tslib时,如果没有指定连接库路径,编译会报错:
/home/yuntaohe/work/ARMBoard/AM3354/misc/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so:undefined reference to `ts_read_raw'
/home/yuntaohe/work/ARMBoard/AM3354/misc/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_open'
/home/yuntaohe/work/ARMBoard/AM3354/misc/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so:undefined reference to `ts_fd'
/home/yuntaohe/work/ARMBoard/AM3354/misc/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so:undefined reference to `ts_config'
/home/yuntaohe/work/ARMBoard/AM3354/misc/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so: undefined reference to `ts_close'
/home/yuntaohe/work/ARMBoard/AM3354/misc/qt-everywhere-opensource-src-4.8.6/lib/libQtGui.so:undefined reference to `ts_read'
解决方法:修改QT源码目录下mkspecs/qws/linux-arm-g++/qmake.conf文件,加上-lts选项:
QMAKE_CC                = arm-linux-gnueabihf-gcc -lts
QMAKE_CXX               = arm-linux-gnueabihf-g++ -lts
QMAKE_LINK              = arm-linux-gnueabihf-g++ -lts
QMAKE_LINK_SHLIB        = arm-linux-gnueabihf-g++ -lts










评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值