虚拟机版本:VMare8.0.0
虚拟机系统:Ubuntu10.0
QT源码版本:qt-embedded-free-3.1.0
花了些时间把虚拟机上的QT编译环境弄好了,在现在总结一下配置过程以及遇到的问题。我的配置环境以及QT版本号如上所述。
起初的时候我用工作的虚拟机环境配置,这个环境是之前同事给我的,里面怎么配置的我也不太清楚,工作环境已经安装了交叉编译工具arm-none-linux-gnueabi,我平时工作的时候都是用这个做交叉编译,程序编译好以后,直接放到嵌入式板子上运行就OK了。在这个环境上编译QT源码的时候总是出错,错误如下:
g++: error trying to exec 'cc1plus': execvp: No such file or directory
用这些错误信息在网上找解决方法的时候,一般都是说原因是g++没有安装或者g++版本与gcc版本不一致,按照网上的说法,我重新安装g++,首先安装软件包build-essential,安装命令为: apt-get install build-essential,然后再安装g++,在安装g++前,查看一个下gcc版本,命令为:gcc -v,得到gcc版本为4.3,于是我安装与之相应的g++版本,命令为:apt-get install g++-4.3,安装完成后,再编译源QT代码,仍然出现同样的错误。我在这个问题上折腾了好久,但是仍然没有解决,当时实在没有办法了,于是决定自己重新装一个系统,自己在系统上配置环境。(ps:知道原因的大神不妨说下解决方法,我等是菜鸟,感谢先!)
决定自己重新装一个系统以后我就立刻行动起来,系统装好以后,按照网上的方法配置环境。
一、建立arm交叉编译工具链(这个过程是完全按照网上来,也没有出现什么问题)
在安装QT/E之前,应确保arm-linux交叉编译工具链已经建立,如果还没有可以参考以下步骤建立。
1、下载交叉编译工具cross-2.95.3.tar.bz2(或其他版本如:cross-3.4.4.tar.bz2),这是已经制作好的arm交叉编译工具链,只需解压及建交环境变量即可使用。
2、把文件cross-2.95.3.tar.bz2拷贝到一个文件夹,这里我用:/usr/local/arm这个目录。 注意后面建立环境变量时要与之对应。
3、解压 tar -xjvf cross-2.95.3.tar.bz2
4、建立环境变量 export PATH=/usr/local/arm/2.95.3/bin:$PATH
或者也可以写进文件 ~/.bashrc中,这样就不用每次开机都export啦。
vim ~/.bashrc
在后面加上 export PATH=/usr/local/arm/2.95.3/bin:$PATH
到此arm-linux交叉编译工具链就已经建好了。
二、编译QT
1、我是在http://download.qt-project.org/archive/qt/上下载的QT源文件,版本如上,因为网上建议用这个版本,具体如何好,我个人也不太清楚。这个网站还有其他各种版本的QT源文件。
3、把文件qt-embedded-free-3.1.0.tar.bz2 拷贝到一个文件夹,这里我用:/usr/local/arm这个目录。 注意后面建立环境变量时要与之对应。
4、解压tar-xzvf qt-embedded-free-3.1.0.tar.bz2
把解压后的文件夹qt-embedded-free-3.1.0改为qte。(可以不改,这里是为了方便,注意后面建立环境变量时要与之对应) mv qt-embedded-free-3.1.0 qte
5、建立环境变量
vim ~/.bashrc
在后面加上
export QTDIR=/usr/local/arm/qte
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
请重新登陆,以使得环境变量生效)
6、配置QT
进入QT/E目录: cd $QTDIR
输入: ./configure -embedded arm -thread -no-cups -qvfb -depths 4,8,16,32
上述选项: -embedded arm 指目标平台为arm; -thread 表示支持qt线程,本人开发当中用到; -qvfb 表示支持虚拟缓冲帧工具qvfb;-depths 4,8,16,32 表示支持4,8,16,32 位的显示颜色深度。还有很多选项就不一一列举,请查看 ./configure -help。
7、编译
make sub-src // 指定按精简方式编译开发包,也就是说有些Qt 类未被编译。
8、测试
至此编译工作完成,最后测试一下是否能正常使用。我们可以用QT自带的例子来测试,如:
cd $QTDIR/examples/aclock //或你自己新建一个QT工程也行
make clean //把原来的清掉
rm *.pro Makefile //删掉,重新建立工程文件
qmake -project
qmake -spec $QTDIR/mkspecs/qws/linux-arm-g++ -o Makefile
-spec指定目标板的配置文件,这里我做的是linux arm平台,注意在这里,$QTDIR/mkspecs/qws/linux-arm-g++ 它不是编译器,是一个配置文件,而编译时用的编译器是我们在第一步建立的arm交叉编译工具链里面的编译器。
make
成功以后就表示QT/E环境已经成功建立。
我在第六步编译的时候遇到了个问题,$QTDIR/include/qvaluestack.h 这个文件的出错,在网上搜了下,在qt-2.3.7/src/tools/qvaluestack.h的第57行,将remove( this->fromLast() );改为this->remove( this->fromLast () );再重新编译就好了。
至此我的虚拟机QT编译环境已经配好,在配置过程中遇到的问题已经总结好,问题的解决方法,都是在网上找到,再次谢谢各位大神分享自己的知识与心得,谢谢!。下一步就是把开发板上的QT环境配好,最后利用环境编写自己的代码。在下一步工作中肯定会遇到很多问题,到时候再请教网上的各位大神。
文章来源:
http://blog.chinaunix.net/uid-20697149-id-1891500.html
http://www.cnblogs.com/dolphi/archive/2012/08/13/2636474.html