站长原创,版权所有ITEEDU,2011-05-24
在进行Qt/Embedded移植过程中,遇到一些问题,现在整理一下子,愿和大家一起分享。
1.Qte-2.3.10的移植问题
1)Qte-2.3.10源码的语法问题
源码在编译过程中,有两处语法错误:
(1)切换到目录下:cd $QTEDIR/include,利用gvim qvaluestack.h打开该文件,将第57行的代码做以修改,
remove( this->fromLast() );改为this->remove( this->fromLast() );
(2)切换到目录下:cd $QTEDIR/include,利用gvim qwindowsystem_qws.h打开该文件,在class类声明中,添加
class QWSInputMethod;
class QWSGestureMethod;
即可。
其实,所谓的语法错误,可能是由于编译器的版本太高导致的。
2)Qte-2.3.10编译一直出错问题
在configuer完毕后,每次make的时候,均会出错,真是让人郁闷,后来才发现是也是源码中的错误:
(1)gvim $TMAKEDIR/lib/qws/linux-arm-g++/tmake.conf,在前边移植中已经介绍了。
将 TMAKE_CC = arm-linux-gcc
TMAKE_CXX = arm-linux-g++
TMAKE_LINK = arm-linux-gcc
TMAKE_LINK_SHLIB = arm-linux-gcc
TMAKE_AR = arm-linux-ar cqs
改为
TMAKE_CC = arm-linux-gcc
TMAKE_CXX = arm-linux-g++
TMAKE_LINK = arm-linux-g++
TMAKE_LINK_SHLIB = arm-linux-g++
TMAKE_AR = arm-linux-ar cqs(2)gvim $QTEDIR/configs/linux-arm-g++-shared
将 SYSCONF_CXX = arm-linux-g++
SYSCONF_CC = arm-linux-gcc
SYSCONF_LINK = arm-linux-gcc
SYSCONF_LINK_SHLIB = arm-linux-gcc
SYSCONF_AR = arm-linux-ar cqs
改为
SYSCONF_CXX = arm-linux-g++
SYSCONF_CC = arm-linux-gcc
SYSCONF_LINK = arm-linux-g++
SYSCONF_LINK_SHLIB = arm-linux-g++
SYSCONF_AR = arm-linux-ar cqs(3) 其他3个文件修改的地方同$QTEDIR/configs/linux-arm-g++-shared相同,请参照前面自己修改:
givm $QTEDIR/configs/linux-arm-g++-shared-debug
givm $QTEDIR/configs/linux-arm-g++-static
givm $QTEDIR/configs/linux-arm-g++-static-debug2.qte-4.7.3编译及其问题总结
笔者觉着qte-2.3.10过于老,目前qt已经升级到4.7.3版本了,而且新添加了好些很实用的功能。上述版本还停留在Qt3.0以前的老版本中。于是就又编译了qte-4.7.3。.
1)qte-4.7.3编译过程
(1)下载qte-4.7.3源码,和tslib(支持触摸屏类库);
(2)解压qte-4.7.3到任意目录,并且重新命名;
(3)确保linux系统中已经安装了交叉编译器arm-linux-gcc-4.3.2或者更高版本;
(4)安装tslib1.4
下载tslib1.4,解压 ;
进入解压的目录运行 执行./autogen.sh ;
执行./configure --prefix=/opt/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes ,经过一段时间的编译 ;
执行make install ;
修改/opt/tslib/etc/ts.conf,把第二行的#号去掉(这样做的主要目的是为了在移植到板子上的时候,可以制定输入模块); 在/etc/profile中加入 export PATH=/opt/tslib:$PATH 。(5)编译qte4.7.3-arm
开始进行配置选项 ;
./configure -prifix /home/rock/pxa270Qt/qte-4.7.3 -embedded arm -release -opensource -fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -no-svg -no-3dnow -no-sse -no-sse2 -silent -qt-libpng -qt-libjpeg -no-libmng -no-libtiff -no-multimedia -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 8,16,32 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I /home/rock/pxa270Qt/qte-4.7.3/tslib/include -L /home/rock/pxa270Qt/qte-4.7.3/tslib/lib
开始进行交叉编译make 此过程要经历很长的一段时间 ;
在交叉编译成功后运行make install安装,这里会默认安装到 /usr/local/Trolltech/QtEmbedded-4.7.0-arm ;
这个时候qte的编译就成功了。其中配置选项可以通过 ./configure --help来获取具体的配置选项含义,最后选择自己需要的选项。其中选项-qt-mouse-tslib后边跟着tslib的相关路径。
安装的时候,也可以选择安装在那里,例如上述配置中就是安装在/home/rock/pxa270Qt/qte-4.7.3目录中;而且要注意源码目录和安装目录必须分开。
2)qte-4.7.3移植问题总结
编译过程中如果注意上述的细节问题,不会出错,但是环境搭建好了之后,编译完毕的Qt程序,比如hello:file hello,发现其是"for kernel 2.6.32"的,也就是说要求arm平台的内核是2.6.32或者更高的。
这造成将hello移植到开发板上之后,发现:./hello -qws之后,提示:cannot find the file or directory。
(1)第一次采用的是交叉编译器arm-linux-gcc-4.4.3来编译qte-4.7.3,结果成功后,编译出来的程序是"for kernel 2.6.32"。
(2)第二次采用的是交叉编译器arm-linux-gcc-4.3.2来编译qte-4.7.3,结果成功后,编译出来的程序是"for kernel 2.6.14"。
通过上述两个环境所编译出来的Qt程序,在移植到开发板上时,都无法运行,即系统不识别该文件。
这种问题的解决方法需要通过升级开发板的内核。