折腾了一天多,终于弄通了
达到的效果是,无论当前你的PC Linux上已经安装的qt版本多么复杂
实现 qt 4.5.2 在PC上模拟编译执行 + ARM上的qt embedded-linux 4.5.2交叉编译(tslib触屏支持)
+直接使用Qt Creator在pc上开发PC、板子都能跑的程序
实现以上功能,真的体会到Qt真TMD的,繁琐复杂又强大
整个过程也是充满曲折的,网上资料概念上的误导无处不在
qt-x11-opensource-src-4.5.2.tar.gz 是PC上的模拟、编译、执行 用的
qt-embedded-linux-opensource-src-4.5.2.tar.gz
是构建目标机上的可执行文件用的,你当然可以把它也编译成x86版本的,但是不能替代qt-x11-opensource-src-
4.5.2.tar.gz的作用。这里仅仅需要把arm版本的编译出来即可
整个过程需要4G以上的磁盘空间,使用虚拟机的童鞋千万要小心,没有剩余空间的话后果很惨的(不能开机),切记。编译过程大约4、5小时,看配置了,很痛苦的等待。
1 qt-x11-opensource-src-4.5.2.tar.gz 很简单
参见但不要全信他的
解压、 ./configure ;make ;make install; ,标准的3板斧即可
可以选择 ./configure -nomake examples -nomake demos -nomake tools 不编实例等
然后试试执行 /usr/local/Trolltech/Qt-4.5.2/examples/widgets/digitalclock/digitalclock -qws
根本没有用到什么qvfb,不过我的机器支持了fb,我想没有联系。要增加fb支持也就是一条内核启动参数的小事。
然后试试编译一个Qt工程,可以到源码里的 qt-x11-opensource-src-4.5.2.tar.gz的/examples/里找,如
/examples/widgets/digitalclock/,删掉所有 除.cpp .h 之外的文件,使用你刚才编译出来的qmake
执行/usr/local/Trolltech/Qt-4.5.2/bin/qmake -v
QMake version 2.01a
Using Qt version 4.5.2 in /usr/local/Trolltech/Qt-4.5.2/lib
可以看到,无论你以前的Qt版本多么混乱,这个Qmake不会乱,不用担心之前的版本影响
只要选对了qmake,万事无忧
在/examples/widgets/digitalclock 里执行
/usr/local/Trolltech/Qt-4.5.2/bin/qmake -project
/usr/local/Trolltech/Qt-4.5.2/bin/qmake
make
然后就可以 ./digitalclock -qws ,很简单地PC端的编译和模拟就实现了
2、 qt-embedded-linux-opensource-src-4.5.2.tar.gz 才是重点
解压之后修改源码,去掉鼠标指针:
cd qt-embedded-linux-opensource-src-4.5.2/src/gui/embedded/
找到 qwscursor_qws.h,在里面加上#define QT_NO_QWS_CURSOR
如果你的工具链名称不是 arm-linux-gcc 这样的,需要到/qt-embedded-linux-opensource-src-4.5.2/mkspecs/qws/linux-arm-g++ 下改qmake.conf ,全部都要改对
然后是最最关键的config ,依照个人情况修改,不具有通用性。当然,之前你要移植好tslib
我用的是
./configure -release -shared -fast -pch -no-qt3support -qt-sql-sqlite
-no-libtiff -no-libmng -qt-libjpeg -qt-zlib -qt-libpng -qt-freetype
-xplatform qws/linux-arm-g++ -embedded arm -depths 4,8,16,32
-little-endian -qt-kbd-usb -no-openssl -nomake examples -nomake demos
-nomake tools -optimized-qmake -no-phonon -no-nis -no-opengl -no-cups
-no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm
-no-xinerama -no-xshape -no-separate-debug-info -no-qvfb
-qt-gfx-linuxfb -no-gfx-qvfb -no-kbd-qvfb -no-mouse-qvfb -no-webkit
-confirm-license -qt-mouse-tslib
-I/home/linux/tslib/include -L/home/linux/tslib/lib 2>../configureERR11.txt
注意黑体,一定要根据你的情况选择
然后就是 make ;make install ;
之后的道理一样,只要用对了qmake,就能得到arm上跑的程序
/usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin/qmake
-------
要真在板子上跑需要做很多工作
把编译完的 LIB 库加到你的文件系统中:
#cd 你的板子的根文件系统
#cd opt
#mkdir qt
#mkdir qtopia
#mkdir qt/lib (存放你的 QT 库)
#mkdir qtopia/bin(存放你的 QT 应用程序)
#cp qt-embedded-linux-opensource-src-4.5.2/lib/* qt/lib/
#cp qt-embedded-linux-opensource-src-4.5.2/examples/mainwindows/menus/menus qtopia/bin
自然需要一个脚本来设置环境
没有通用性,得看屏和tslib移植
我用的是自己写的startqt4.5.2.sh
#!/bin/sh
export TSLIB_ROOT=/tslib
export TSLIB_TSDEVICE=/dev/event0
export set TSLIB_TSDEVICE=/dev/event0
export set TSLIB_CONFFILE=/tslib/etc/ts.conf
export set TSLIB_PLUGINDIR=/tslib/lib/ts
export set TSLIB_CALIBFILE=/etc/pointercal
export set HOME=/root
export set QTDIR=/opt/qt
export set QPEDIR=/opt/qtopia
export set KDEDIR=/opt/qt
export set QWS_DISPLAY="LinuxFB:/dev/fb0"
export set QWS_DISPLAY="LinuxFb:mmWidth50:mmHeight65:0"
#export QWS_SIZE=320x240
export TSLIB_TSEVENTTYYPE=H3600i
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=/tslib/etc/ts.conf
export set QWS_KEYBOARD="TTY:/dev/tty1"
export set QWS_MOUSE_PROTO=Tslib:/dev/event0
export set QT_PLUGIN_PATH=$QTDIR/plugins/
export set QT_QWS_FONTDIR=$QTDIR/lib/fonts/
export set PATH=$QPEDIR/bin:$PATH
export set LD_LIBRARY_PATH=$QTDIR/lib:$QPEDIR/plugins/imageformats:$LD_LIBRARY_PATH
/tslib/bin/ts_calibrate
上电执行
. ./startqt4.5.2.sh
然后就是你的程序了,假设是main
./main -qws &
不加& 就报什么符号错误,烦
3、使用Qt Creator
Qt Creator跨平台,非常好。以前以为不能直接拿来编写板子上的Qt,真是无知。
只要把 tools ->options设置一下即可
然后即可创建即可在pc上模拟,又可在arm上跑的项目了
只要在左边的 projects 里选一下即可