交叉编译QT4.7.0

ubuntu11.10     交叉编译器:4.5.1      QT版本:4.7.0

这周移植QT可谓是路途多舛,之前一直想一直高版本的,于是就先移植了QT4.8.4,按照别人的方法,是编译出arm版本的了。可是自己手又抖了抖,想编译x86版本的,于是居然没有make clean 也没有在一个新的源码文件夹下配置。更神奇的是直接./confiure 以为会直接安装到默认的文件下。奈何第二天以来发现不对劲了,怎么一个qt4.8.4-arm有1.2G,而且也没有x86版本的4.8.4,当时也没有注意。于是在配置qtcreator的时候死活出错说找不到编译器。可是明明有交叉编译器。后来又查资料,于是查看了一下/mkspec/default的文件属性,发现它是指向linux-g++的,并不是linux-arm-g++,于是想到可能是之前编译弄错了,于是还是老实转战移植Qt4.7.0

这次就先移植arm版本的arm-qt-4.7.0按照友善提供的qt资料所说在qt4.7.0源码文件夹下输入:echo yes| ./configure -prefix /usr/local/Trolltech/arm-Qt-4.7.0 -opensource -embedded arm -xplatform qws/linux-arm-g++ -no-webkit -qt-libtiff -qt-libmng -qt-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -no-neon

然后 make && make install  安装完成。 然后配置qtcreator

交叉编译QT4.7.0_第1张图片


如上所示选择Qt版本,点添加版本,选择arm-Qt-4.7.0/bin/qmake就好。在编译器则选择4.5.1的路径:
如下所示
交叉编译QT4.7.0_第2张图片

在构建kit如下:


交叉编译QT4.7.0_第3张图片


由于我的桌面默认选择的是对应arm平台的QT4.7.0,编译器选择的也是GCC(交叉编译器)
如果显示mkspec下找不到linux-arm-g++可以看看mkspec下的default指向哪个。如果不是linux-arm-g++则编译有问题。
接下来依次点击文件->添加已有文件。选择hello(自己已经编好的)。
再点击项目,如下所示:




选择对应arm平台的构建套件,这里我选的是桌面(对应交叉编译器和arm-Qt-4.7.0),然后点小锤子的图标构建对应arm的hello执行程序,这里运行成功,file 对应的构建目录下的hello文件,file hello 显示:hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.27, not stripped

然后把对应的arm-Qt-4.7.0拷贝到tiny6410上,这里我选择的是通过先传到优盘上,然后把优盘插到开发板上,mount -t vfat /dev/sda4 /work,把优盘挂载到、work文件夹上。cd /work ; cp arm-Qt-4.7.0 /usr/local/Trolltech/arm-Qt-4.7.0 ,然后编译脚本:vi /bin/setqt4env
内容如下所示:
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin
                                                         
if [ -c ${TSLIB_TSDEVICE} ]; then                        
        export QWS_MOUSE_PROTO="Tslib MouseMan:/dev/input/mice"
        if [ ! -s /etc/pointercal ] ; then                     
                rm /etc/pointercal                             
                /usr/bin/ts_calibrate                          
        fi                                       
else                                             
        export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
fi                                                       
                                                         
export QWS_KEYBOARD=TTY:/dev/tty1                        
                                                         
export HOME=/root 
因为要运行qt应用程序要先关闭qtopia或者其他qt程序,于是进入/etc/init.d/rcS ,注释掉/bin/qtopia & ,然后重启。接着运行刚才新建的脚本文件setqt4env 命令:/bin/setqt4env 然后通过挂在nfs把ubuntu下的hello传到板子上,对应挂在的目录是/mnt执行:./mnt/hello -qws 运行程序跟pc上显示的效果一样。
另外这里有个小插曲。由于之前是直接使用tiny6410板子上的/bin/qt4文件,里面其实也就是比setqt4env多了cd /usr/local/Trolltech/arm-Qt-4.7.0/demos/embedded/fluidlauncher        
./fluidlauncher -qws                                                     
hotplug 

然后我重启板子后运行/bin/qt4后,就运行自带的测试程序,此时开发板上的虚拟鼠标可以拖动程序。但是再运行自己的hello应用程序的时候,鼠标就不动了。后来网上查tslib的问题。可是自己在移植tslib1.4后,还是不行。后来又突然可以移动鼠标了。于是就花了一天去测试哪里出了问题。最终才发现并不需要移植tslib,而只要注释掉qt4的最后三条语句再source /bin/qt4 ,然后运行hello就可以拖动鼠标。并可以放大窗口了。如果想开机就挂在自己的qt应用,只需要在/etc/init.d/rcS 文件下执行 
/bin/setqt4env & 
/work/hello -qws & (hello放在work文件夹下,另外&代表后台执行程序)
接着开机就启动hello程序了。








你可能感兴趣的:(交叉编译QT4.7.0)