一、linux下面装好Qtcreator
首先要准备好交叉编译所需要的软件包:
(1)arm-linux-gcc-4.4.3-20100728.tar.gz(交叉编译环境)
(2)qt-everywhere-opensource-src-4.8.5.tar.gz(Qt的源码)
(3)qt-creator-linux-x86_64-opensource-2.5.2.bin(我的系统是64位,所以选择x86_64)
(4)tslib-1.4.tar.gz(触摸屏校验工具)
其中(2)和(3)在http://download.qt-project.org/archive/ 进行下载。
记住tslib需要交叉编译,具体方法网上很多,常见错误我的博客也有。
(确保tslib/bin下的文件是32位ARM的,并且移植到开发板usr/local/tslib下后ts_calibrate可以正确运行)
qt-creator-linux-x86_64-opensource-2.5.2.bin 拷贝到linux系统中,在终端中把路径切换到qt-creator-linux-x86_64-opensource-2.5.2.bin所在的路径,运行令:./qt-creator-linux-x86_64-opensource-2.5.2.bin 就会出现图形安装界面;下面的安装步骤就和我们在windows下安装软件差不多。
注意:下的版本要和你的操作系统相匹配,32位的系统下对应32位的应用程序;
二,Windows下面安装Qt
下面我们来进入正题,windows下安装4.8.5版本的qt软件。
1、下载qt-win-opensource
首先需要下载QT安装软件,在qt官网可以直接进行下载,但是由于天朝局域网的限制,官网打开的速度很慢,而且有些网址无法打开,这里贴出直接的下载网址,省去从官网找下载网页的麻烦。网址是:http://download.qt.io/archive/qt/
QT的编译可以使用mingw或者vs2008,vs2010进行,其中mingw是可以使用一个库进行编译,其他的vs版本需要安装vs才能进行QT编译,vs比较大,所以我这里就使用mingw,下载对应的版本qt-win-opensource-4.8.5-mingw.exe
2、下载和安装MinGW
安装这个之前需要mingw,所以需要先下载mingw,但是QT每个版本对于mingw的版本也是有要求,这里提供可以匹配的mingw下载http://download.csdn.net/detail/andylauren/9583691
下载完成之后只需要进行解压,我一般习惯解压在c盘根目录下,并将文件夹改名为mingw。这个文件夹路径在后面设置的时候需要用到。
3、安装qt-win-opensource
这一步骤比较简单,就是下一步下一步就行,注意设置一下安装路径就好。
4、下载和安装QTcreator
qt-win-opensource是一个纯代码编辑环境,如果对于老工程师可以完全使用代码进行界面的编辑,但是有界面设计的可以提高开发效率,所见即所得。
下载地址是:http://download.qt.io/archive/qtcreator/
我选择的是qt-creator-win-opensource-2.5.2,因为我选择最新的3.0版本不能正常使用。然后也是简单的下一步下一步,在其中一个步骤的时候需要选择mingw的路径,就是将前边解压的mingw路径填写进去,然后在安装的时候设置一下安装路径就可以了。
5、QTcreator设置,环境变量的设置
这个时候是不能使用QTcreator进行QT开发,需要对一些进行环境设置,
步骤是:工具-》选项-》构建和运行-》Qt Versions
将其中的qmake路径填写qt-win-opensource的安装路径中的bin目录下的qmake.exe
编译器选项
在之前安装的时候如果已经选择了mingw路径的这里会自动出现,如果之前跳过了在这里可以选:添加-》mingw,然后找到目录下的bin目录
在构建套件(Kit)选项卡下需要设置编译器:选择MinGW,Qt版本:选择Qt 4.8.5(4.8.5)
现在基本已经设置好了,已经可以使用QT进行编译,但是编译出来的可执行文件只能在QT中使用qt打开运行,在文件夹中直接点击可执行软件不能运行,会提示找不到库,这里是需要设置一下windows的环境变量,在PATH中添加qt-win-opensource安装路径下的bin路径,和mingw的bin路径。
首先右键我的电脑-》属性-》高级系统设置-》高级-》环境变量-》系统变量-》path中添加上述路径。我的路径是D:\Qt\4.8.5\bin;D:\mingw\bin;
这样就可以在文件夹中直接双击可执行文件运行了。
6、个人设置
我比较喜欢深色背景的编程环境,可以在选项-》文本编辑器-》配色方案中进行修改,我修改为Inkpot
还有就是我使用eclipse习惯了,习惯使用alt+/来作为自动补齐,可以在环境-》键盘中找到CompleteThis修改为Alt+/就可以了。
到这里就完成了全部的windows下载安装和设置,如果习惯了windows下载操作可以在windows下做开发,然后完成后拿到linux下进行编译,运行。
三、Qt库源码编译
将源码qt-everywhere-opensource-src-4.8.5.tar.gz 进行解压,并复制三份到/usr/local目录下,并分别命名为qt-pc,qt-arm。
进入qt-pc目录,执行如下操作:
#./configure
# make
# make install
编译过程中出现的问题:
出错:Basic XLibfunctionality test failed!
这个错误主要是因为,XLib库没有安装,所以在编译X11平台时,应该保证,以下命令正确执行:sudo apt-get install libx11-dev libxext-dev libxtst-dev
注意:可以使用 make confclean 命令 把以前的配置信息清除掉,然后再重新配置。
下面编译qt-arm
必须加上“-prefix /usr/local/Trolltech/QtEmbedded-4.8.5-arm ”参数, 不然安装后不在QtEmbedded-4.8.5-arm文件夹下,而是覆盖了QtEmbedded-4.8.5。
写一个脚本文件,把下面放进去
# ./configure \
-prefix /usr/local/Trolltech/QtEmbedded-4.8.5-arm \
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-g++ \
-depths 16,18,24 \
-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 /usr/local/tslib/include -L /usr/local/tslib/lib
如果放弃配置,则使用命令:# make confclean
编译:# make
安装:# make install
(我自己遇到的问题另一篇博客也有写)
安装完成后,在/usr/local/Trolltech目录中有二个文件夹:Qt-4.8.5、QtEmbedded-4.8.5-arm。
然后将库QtEmbedded-4.8.5-arm下面的lib plugins demos example目录通过NFS服务放到开发板相同目录下面即可。
到这个时候就可以在开发板上运行QT程序了
四、测试
首先我们需要自己写一个代码,什么 代码都行,拿来别人的也可以。可以在windows或者linux上写都行,我个人的习惯是在windows下面编辑代码,查看运行效果,效果没问题了在拿到linux下进行交叉编译。
下面我们现在windows下写一个最简单的例子:你好世界!
这个例子中会使用到中文和按钮切换标签的内容。
如何创建工程这里就不细讲了,书上和网上有很多教程,按照步骤去做就好。
然后就可以将我们的文件复制到linux 下面去进行交叉编译了,这里只需要复制源码文件,工程文件建议删除,因为在交叉编译的时候会生成新的工程文件,我的文件如下
把他们压缩成一个包,到linux下面去解压,然后使用终端跳转到这写文件的路径下
linux@ubuntu:~/16021/QTprog$ cd /usr/local/Qt(放上面四个文件的目录)
然后找到交叉编译出来的qmake路径使用qmake -project
linux@ubuntu:~/16021/QTprog/chinesefont-linux$ /usr/local/TrolltechQtEmbedded-4.8.5-arm/bin/qmake -project
有的人会把这个交叉编译qmake设置为环境变量,我习惯把x86下的qmake设置为环境变量,这样就可以在linux下面查看效果,但是在交叉编译的时候就需要输入qmake的全路径,如何设置还需要根据个人需要。
这时候目录下就会出现.pro的工程文件
然后我们再qmake就可以生成makefile
linux@ubuntu:~/16021/QTprog/chinesefont-linux$ /usr/local/TrolltechQtEmbedded-4.8.5-arm/bin/qmake
然后使用make编译
之后会出现可执行文件,比如我的是chinesefont
把它拷贝到开发板的文件系统上,路径随意。我是直接拷贝到根目录下,然后需要一个启动脚本。
1. #!/bin/sh
2. base1=qpe
3. pid=`/bin/pidof $base1`
4. if [ -n "$pid" ]; then
5. killall $base1
6. fi
7.
8. base2=qss
9. pid=`/bin/pidof $base2`
10. if [ -n "$pid" ]; then
11. killall $base2
12. fi
13.
14. base3=quicklauncher
15. pid=`/bin/pidof $base3`
16. if [ -n "$pid" ]; then
17. killall $base3
18. fi
19.
20.
21. base4=fluidlauncher
22. pid=`/bin/pidof $base4`
23. if [ -n "$pid" ]; then
24. killall $base4
25. fi
26.
27. export TSLIB_ROOT=/usr/local/tslib #你开发板的tslib路径
28. export TSLIB_TSDEVICE=/dev/input/event2
29. export TSLIB_TSEVENTTYPE=H3600
30. export TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf
31. export TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
32. export TSLIB_CALIBFILE=/etc/pointercal
33. export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
34. export TSLIB_CONSOLEDEVICE=none
35. export TSLIB_FBDEVICE=/dev/fb0
36. export QTDIR=/usr/local/TrolltechQtEmbedded-4.8.5-arm/ #你的qt库路径
37.
38.
39. export LD_LIBRARY_PATH=$QTDIR/plugins/qtopialmigrate/:$QTDIR/qt_plugins/imageformats/:$QTDIR/lib:/root/tslib/build/lib:$LD_LIBRARY_PATH
40. export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/root/tslib/build/bin
41.
42.
43. if [ -c /dev/input/event2 ]; then
44. export QWS_MOUSE_PROTO="Tslib:${TSLIB_TSDEVICE}"
45. if [ -e /etc/pointercal -a ! -s /etc/pointercal ] ; then
46. rm /etc/pointercal
47. /root/tslib/build/bin/ts_calibrate
48. fi
49. else
50. export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
51. >/etc/pointercal
52. fi
53. export QWS_KEYBOARD=TTY:/dev/tty1
54.
55.
56.
57. FB_SIZE=$(cat /sys/class/graphics/fb0/virtual_size)
58.
59. #export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
60. case "$FB_SIZE" in
61. 800,480)
62. export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
63. ;;
64. 480,272)
65. export QWS_DISPLAY="LinuxFb:mmWidth76:mmHeight44:1"
66. ;;
67. *)
68. export QWS_DISPLAY="LinuxFb:mmWidth91:mmHeight53:1"
69. ;;
70. esac
71. #export QWS_DISPLAY=:1
72.
73.
74.
75. export HOME=/root/QtE4Home
76.
77. #cd /home/linux/arm/qt-4.8.5-arm/demos/embedded/fluidlauncher(qt可执行文件的路径)
78. ./chinesefont -qws
其中倒数第二行是跳转到可执行文件的路径下,根据自己的需要进行修改,我的脚本和可执行在同一个目录,所以我把这行注释掉了。
最后一行就是启动可执行程序,结尾的-qws是必须的。
是不是和电脑看到一样,如果想做成开机启动,只需要将启动脚本加入到/etc/init.d/rcS里面就可以了。
讲到这里我们就已经从windows安装到linux安装再到arm平台交叉编译,最后将自己的程序运行起来了 。