Qt embeded 4.5.3 在ARM
Qt embeded 4.5.3 在ARM
移植这个是发现用Qt 4.6 for X86移植到ARM-Linux,理论上移植没太多问题,但实际碰到太多问题,而且QT官网上有针对Embeded Linux 的qt 4.5.3下载。这个资料也全。因此首先用这个版本试试。然后再来移植4.6的版本。 下载 .5.3.tar.gz 项目主页 .5/qt-embedded-linux.html解压 tar xvzf qt-embedded-linux-opensource-src-4.5.3.tar.gz -C /opt/hxy cd /opt/hxy/qt-embedded-linux-opensource-src-4.5.3 在编译前最好读下QT的文档 <<Installing Qt for Embedded Linux>> .5/qt-embedded-install.html <<Cross-Compiling Qt for Embedded Linux Applications>> .5/qt-embedded-crosscompiling.html
1.生成Makefile
Qt4的configure 参数比一般用configure 的项目更加复杂
参考参考文档1 Cross-Compiling Qt for Embedded Linux Applications,这里解释一下.这里有一些跟其它configure不一样的地方,QT所有选项是用-打头,如 -prefix -shared,而且是长选项用--打头,如--help --prefix ,这样很容易写错.
1.1 目标平台 -xplatform 参数
QT使用qmake 产生Makefile,为了让QT在不同平台下编译, QT预先定义一些平台Makefile变量.这一些变量根据编译平台不同,采用不同的值.如QMAKE_CC 在ARM-LINUX下等于arm-linux-gcc.这一些变量都存在名为qmake.conf文件里.当qmake生成Makefile时,将采用这个文件的值.
QT已经针对所有测试过的平台都写相应的qmake.conf.它全部放在QT目录下的mkspecs目录.这是qt 4.5.3的mkspecs下部分目录.
aix-g++ irix-cc-64 macx-xlc win32-msvc irix-g++ netbsd-g++ wince50standard-armv4i-msvc2005 aix-xlc solaris-g++ freebsd-g++ wince50standard-mipsiv-msvc2005 |
其中针对QT窗口系统(QWS)的平台放在 mkspecs/qws下面.这是
freebsd-generic-g++ linux-generic-g++ linux-sharp-g++ linux-arm-g++ linux-generic-g++-32 linux-sh-g++ linux-armv6-g++ linux-ipaq-g++ linux-x86_64-g++ linux-avr32-g++ linux-lsb-g++ linux-x86-g++ linux-cellon-g++ linux-mips-g++ linux-zylonite-g++ linux-dm7000-g++ linux-ppc-g++ macx-generic-g++ linux-dm800-g++ linux-sh4al-g++ solaris-generic-g++ |
象linux-arm-g++的qmake.conf的内容
# include(../../common/g++.conf) # modifications to g++.conf # modifications to linux.conf load(qt_config) |
-embedded 体系结构参数
QT为了更高的效率和线程安全。QT定义的原子操作,它跟各个平台高度相关。嵌入式平台必须配置这个参数,Configure用-embeded 写入Makefile.比如arm 就是 –embedded arm .
这个参数决定QtCore引用哪一个头文件,象ARM就引用 src/corelib/arch/qatomic_arm.h -little-endian 字节序选项–big-endian 大部分采用 -little-endian (小端字节序) 1.3 编译配置选项 -shared 编译动态版本 -prefix 编译好Qt库安装目录,默认目录是/usr/local/Trolltech/QtEmbedded-4.6.3 ,这里设为 -prefix /opt/QtEmbedded-4.5.3 (注意没有=) -D <string> ........增加宏定义
-I <string> ........ 增加外部头文件引用目录
-L <string> ........ 增加外部库路径 1.4 指定QT组件编译
这个指QT库中哪一些不被编译,这一类参数以 --nomake 来指定
如 –nomake examples –nomake demos ,这个以节约编译时间。
相反的指定哪一部分编译用 –make 如 -make libs 如果QT的扩展库则直接采用名字来指明。
-no-XXX表示不编译某一些库, -no-phonon 不编译 phonon库,则对应的 –phonon就编译它。类似参数有。
[-no-dbus] [-dbus] [-no-svg] [-svg] [-no-webkit] [-webkit]
1.5 指定哪一些第三方库被引入。
QT作为一个跨平台的函数,必然大量引用第三方库,在嵌入式平台上,必须要有选择指定使用第三方案。
一般有三种情况。
1).QT已经把大量第三方库源码放在src/3rdparty目录下。用 -qt-XXXX参数指定,如 -qt-libpng 表示用QT自己目录下的libpng源码编译,这种方法比较省心,并且出错可能少。
2).使用操作系统中已经编译好第三方库,用-system-XXX参数指定,如-system-libjpeg 表示用系统中编译好的libjpeg库,这里需要与 –I,-L两个参数来指定相应头文件和库路径。
3).不编译,使用-no-XXX来指定 ,如-no-cups,不编译cups打印支持。 1.6 指定常用外部设备的类型
- -qt-gfx-<driver> ...指明图形设备类形,常见有 –qt-gfx-qvfb (X85 FB虚拟器),-qt-gfx-vnc ,远程桌面。-qt-gfx-linuxfb frameBuffer输出
- -no-gfx-<driver> 禁止采用这种类型输出 –no-gfx-vnc. -no-gfx-transformed -no-gfx-multiscreen
- -qt-kbd-<driver> 指明键盘设备 --qt-kbd-usb USB键盘 –qt-kbd-tty 终端输入
- -qt-mouse-<driver> ..指明点输入设备,-qt-mouse-pc ,-qt-mouse-tslib 使用TSLIB来控制。 注意QT 5.3.2不支持USB鼠标
- -plugin-sql-<driver> 这个勉强归于这一类,采用哪一种数据库引擎。-plugin-sql-sqlite.使用sqlite
(echo o ; echo yes ) | ./configure -prefix /opt/QtEmbedded-4.5.3 -shared -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-gfx-linuxfb -qt-kbd-usb -qt-mouse-tslib -qt-zlib -qt-freetype -qt-libtiff -qt-libpng -qt-libmng |
cp -ra /opt/QtEmbedded-4.5.3/lib/* /home/hxy/qte-4.5.3/lib 在开发板上用,把这个路径mount上/mnt/nfs mount -t nfs -o nolock,intr,rsize=1024,wsize=1024 192.168.1.8:/home/hxy /mnt/nfs 在开发板执行如下,建立与主机同名目录链接,因为QT很多程序要使用原来路径。 ln -s /mnt/nfs/qte-4.5.3 /opt/QtEmbedded-4.5.3 3.2 写QT配置文件 QT程序有两种模式运行程序. 1)加入Qtopia桌面,放入一个图标,点击运行。这要求移植Qtopia。这是下一步工作 2)独立程序。这要求程序自己配置环境.我们采用这模式测试一下。 独立运行需要配置一些环境,我统一写入一个脚本
1. 如果使用 tslib 。需要配置相关选择
2.QT本身环境变量
3. LD_LIBRARY_PATH 指向QT库路径和tslib库路径。
tslib环境含义参见
.html
QTDIR需要如下变量
export QTDIR=/mnt/nfs/qte-4.5.3 #QTDIR发布目录
export QWS_KEYBOARD=USB:/dev/input/event1 #键盘采用USB键盘
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0 #tslib输入
export QWS_SIZE=320x240 #LCD分辨率
执行QT应用程序
./qplayer -qws
以下是完整脚本
#tslib 环境变量 ----------------------------- export LD_LIBRARY_PATH=$QTDIR/lib:$TSLIB_ROOT/lib export QWS_KEYBOARD=USB:/dev/input/event1 |
这是在我的板运行效果,手机拍摄效果不好,但仍然可以看出是桌面版一样效果,因为没有对嵌入式版本做优化。窗口很大,而且汉字显示也不正确,但是按钮的点击反应也正确,能弹出文件打开对话框.
运行注意.网上很多人介绍用gcc 4.3.2编译会有段错误,建议用gcc 4.1.2。我第一次执行也是如此。但用gdb调试发现虽然是用-qt-mouse-tslib,但是仍然需要外部tslib的动态库,否则也是段错误。另外必须要配置好tslib可以正常工作。因此第一步必须把ts_calibrate 能正确执行。才要执行下一步。
另外虽然Makefile使用QT自带的库来编译,但是最终输出并没有输出so.但程序能正常运行这个需要检查一下是为什么。
3.1 Qte目录lib/fonts下必须有中文字体,一般自带了unifont. 3.2 将应用程序字体用setfont()设为unifont
|
3.3 设定中文编码格式utf8(Linux下)
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
3.4 在使用中文字符串的地方用tr转换即可
ui->action_Open->setText(tr("打开"));
ui->action_Play->setText(tr("播放"));
ui->action_Pause->setText(tr("暂停"));
ui->action_Stop->setText(tr("停止"));
ui->action_Quit->setText(tr("退出"));
- 性能测试(一)
- Driller复现
- 卷积神经网络使用到的公式
- matlab stats里的f值,MATLAB 回归分析regress,nlinfit,stepwise函数
- rowid与rownum的含义是什么?
- mybatis实战:一、mybatis入门(配置、一些问题的解决)
- Android权限
- Hibernate Annotation
- 概率漫谈 转自 林达华
- echarts 修改tooltip字体大小
- int型整数的数值范围
- #include < > 和 #include “ “ 的区别
- 黑客快速入门
- MinGW 和 MSYS 的手动安装与环境配置
- IIS的使用
- Azure App object和Service Principal
- 【JAVA】使用intellij IDEA将项目打包为jar包
- 统计学,机器学习,数据挖掘,深度学习
- 统计学,机器学习,深度学习,数据挖掘的联系
- 计算机软件可以用虚拟串口吗,虚拟串口以及在Proteus中的使用