这篇文章是我写的第一篇嵌入式技术文章,其实也不算文章了,只是一个自己学习的总结。在学习QT编译环境搭建时候遇到了很多问题,只要细心就一定能够解决的。因为有纪念价值所以就发上来,如果兄弟们遇到相同的问题都可以来看下。呵呵
在网上看了N篇关于QT交叉编译环境的文章,大多都不适合,我也不知道为什么,比较有用的还是阿南写的那篇《嵌入式入门笔记》。总结了以上,写出了个自己的版本,就算是做个纪录吧。
所用程序包及版本:
qt-embedded-2.3.7.tar.gz qtopia-free-1.7.0.tar.gz qt-x11-2.3.2.tar.gz tmake-1.1.1.tar.gz
基础知识:
Qtopia 是桌面系统应用程序
Qt-e 是应用程序的运行环境(库)
Qt-x11 是编译所需要的工具包 包括UIC,MOC,DESIGNER等
宿主机: 都是在linux-g++
1. 编译QT-X11工具包
2. 编译QT-E库
3. 设置环境变量,主义指定平台。
4. 编译基于QT-E库的应用程序 (注意指定编译器)
5. 编译运行 QTOPIA (注意指定平台)
6. 将应用程序添加到桌面系统QTOPIA
目标机: 编译器 linux-arm-g++ 配置支持触摸屏
1. 编译QT-X11工具包同宿主机一样,不改变任何项。
2. 编译QT-E库指定编译器以及tmake。增加触摸屏支持。
3. 编译运行基于QT-E的应用程序(开发板测试)--------最终目标
4. 编译QTOPIA
指令:
编译QT-X11指令:
Cd qt-x11
Export QTDIR=$PWD
Echo yes | ./configure –static –no-xft –no-opengl –no-sm –thread –system-jpeg –system-libpng –gif (可以用./configure –help 来查看可选参数)
Make –C src/moc
Cp src/moc/moc bin
Make –c src (在这里会报错,解决方案在后面)
Make –C tools/designer
Make –C tools/qvfb
Cp tools/qvfb/qvfb bin
Strip bin/uic bin/moc bin/designer bin/qvfb
错误解决:
在make –c src 部分的时候会报错 qxml.o
解决:修改include/qvaluestack.h 第57行修改为this->remove
编译QT-E 指令:
Export QTDIR=$PWD/qt-e
Export QPEDIR=$PWD/qtopia
Export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
Export TMAKEDIR=$PWD/tmake
Export TMAKEPATH=$PWD/tamke/lib/qws/linux-arm-g++
Export PATH=$PWD/tmake/bin:$PATH
将开发板所带配置文件 qconfig-local.h 复制到src/tools/
./configure –xplatform linux-arm-g++ -qconfig local –depths 32 –thread
Make (在这里也会报错)
错误解决:
在make 的时候会报错allmoc.o
解决:在src/kernel/qwindowsystem_qws.h 前加入类引用
Class QWSInputMethod;
Class QWSGestureMethod;
编译应用程序的指令:
环境变量的设定:
Export QTDIR=/home/mick/QTE/HOME/qt-e
Export QPEIDR=/home/mick/QTE/HOME/qtopia
Export LD_LIBRARY_PATH=/home/mick/QTE/HOME/qt-e/lib:$LD_LIBRARY_PATH
Export TMAKEDIR=/home/mick/QTE/HOME/tmake
Export TMAKEPATH=/home/mick/QTE/HOME/tmake/lib/qws/linux-arm-g++
Export PATH=/home/mick/QTE/NEW/tmake/bin:$PATH
工程文件:
Progen –n hello –o hello.pro
Tmake –o Makefile hello.pro
Make
GUI文件:
Uic –o hello hello.ui
Uic –o hello.cpp –impl hello.h hello.ui
错误解决:
编译应用程序的时候会报错,ld returned 1 exit status
解决:将/tmake/lib/qws/linux-arm-g++/的tmake.conf的tmake_link=linux-arm-gcc和tmake_link_shilb=linux-arm-gcc 都改为G++,重新编译即可。