分类:
2008-05-17 17:40:17
qt-2.3.7 | qt-2.3.7:一个string.h只要考过去就可, | |
qt-2.3.2: | i configs/linux-g++-shared 修改语句 SYSCONF_CXXFLAGS_X11= -I/usr/include/freetype2 |
不然出错: |
qtopia: | 要用uic,qt-2.3.2/bin copy过qt-2.3.7/bin去就可 | |
global1.cpp:39:23: uuid/uuid.h: 没有那个文件或目录 只要就可p -r /pxa255/e2fsprogs/lib/uuid include/ | ||
cp /pxa255/e2fsprogs/build/lib/libuuid.a /usr/lib/ | 不然还是在/home/qing/Qt_x86/qtopia-free-1.7.0/lib 生成不了 libqtopia.so.1.6.2 如此刚会报错usr/ld cannot find lqtopia |
[mark hw]$ | ||
解决---修改: hello.pro文件CONFIG = qt qtopia warn_on release | ||
然后 tmake -o makefile hello.pro | ||
make 就可在qvfb跑起来,表示交叉编译可在开发板上运行 | ||
参考资料:http://www.brintsoft.com/zaurus/dev.html |
在cross compile时报错 |
/root/arm-gcc/qt-2.3.7/include/qcstring.h:50:20: string.h: 没有那个文件或目录
In file included from /root/arm-gcc/qt-2.3.7/include/qstring.h:43, |
原因是交叉编译工具是别人的,不是我做qtopia时设置过的tool -cross-compile |
安装 1.建立本机Qtopia 虚拟平台 软件:tmake-1.13.tar.gz qtopia-free-source-2.1.1.tar.gz qt-embedded-2.3.10-free.tar.gz qt-x11-2.3.2.tar.gz qt-x11-free-3.3.4.tar.gz e2fsprogs-1.39.tar.gz jpegsrc.v6b.tar.gz 将本次实验所需的四个文件拷贝到/root/qtopia 目录下,我们以下的实验都是在这个目录下进行的。 tar -zxvf qt-x11-free-3.3.4.tar.gz
mv qt-x11-free-3.3.4 qt-x11-3.3.4 tar -zxvf e2fsprogs-1.39.tar.gz
tar -zvxf jpegsrc.v6b.tar.gz
tar -zxvf tmake-1.13.tar.gz
tar -xzvf qt-x11-2.3.2.tar.gz
tar -xzvf qt-embedded-2.3.10-free.tar.gz mv qt-2.3.10 qt-2.3.10-host tar -xzvf qtopia-free-source-2.1.1.tar.gz mv qtopia-free-2.1.1 qtopia-2.1.1-host 初始环境变量 vi root/qtopia/shell/initial.sh 下面是文件内容
export QTEDIR=/root/qtopia/qt-2.3.10-host export QT2DIR=/root/qtopia/qt-2.3.2 export TMAKEDIR=/root/qtopia/tmake-1.13 export QPEDIR=/root/qtopia/qtopia-2.1.1-host export QT3DIR=/root/qtopia/qt-x11-3.3.4 export DQTDIR=$QT3DIR
export QTDIR=$QTEDIR
export PATH=$QT2DIR/bin:$QTEDIR/bin:$QPEDIR/bin:$DQTDIR/bin:$QT3DIR/bin:$QTDIR/bin:$TMAKEDIR/bin:$PATH export LD_LIBRARY_PATH=$QT2DIR/lib:$QTEDIR/lib:$QPEDIR/lib:$DQTDIR/lib:$QT3DIR/lib:$QTDIR/lib:$LD_LIBRARY_PATH 使文件生效
source root/qtopia/shell/initial.sh 安装Tmake
export TMAKEDIR=$PWD/tmake-1.13 export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export PATH=$TMAKEDIR/bin:$PATH 安装qt-x11-3.3.4
cd $QT3DIR export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT3DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure make 安装qt-x11-2.3.2
cd $QT2DIR export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH ./configure -no-xft make mkdir $QTEDIR/bin cp bin/uic $QTEDIR/bin/ 安装qvfb
export TMAKEPATH=$TMAKEDIR/lib/linux-g++ export QTDIR=$QT2DIR export PATH=$QTDIR/bin:$PATH:$TMAKEDIR/bin export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cd $QTEDIR/tools/qvfb /root/2410sQt/tmake-1.13/bin/tmake -o Makefile qvfb.pro make mv qvfb $QTEDIR/bin/ 安装libqte
cd $QTEDIR export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++ export QTDIR=$QTEDIR export PATH=$QTDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH cp -f $QPEDIR/src/qt/qconfig-qpe.h src/tools/ ./configure -system-jpeg -gif -no-xft -qconfig qpe -qvfb -depths 4,8,16,32 make sub-src 安装 e2fsprogs-1.39
cd e2fsprogs-1.39 ./configure -enable-elf-shlibs make make install lib/uuid/ 安装qtopia需要的文件
将e2fsprogs-1.35/lib/目录下uuid的文件夹复制到qtopia-2.1.1-host/include下 将e2fsprogs-1.35/lib/中的libuuid.a libuuid.so复制到qtopia-2.1.1-host/lib下 安装jpeg mkdir /usr/local/man mkdir /usr/local/man/man1 cd jpeg-6b
./configure --enable-shared --enable-static make make install -lib $ls /usr/local/lib
libjpeg.la libjpeg.so libjpeg.so.62 libjpeg.so.62.0.0 安装qtopia需要的文件
[root@ns jpeg-6b]# cp jpeglib.h /qtopia/qtopia-2.1.1-host/include [root@ns jpeg-6b]# cp libjpeg.a /usr/local/qtopia-2.1.1-host/lib [root@ns jpeg-6b]# cp libjpeg.so* /usr/local/qtopia-2.1.1-host/lib //=================== 如果没有先新建文件夹man\man1 编译jpeg时报错
/usr/bin/install -c -m 644 ./cjpeg.1 /usr/local/man/man1/cjpeg.1 /usr/bin/install: cannot create regular file `/usr/local/man/man1/cjpeg.1': No such file or directory 缺少/usr/local/man目录及man1子目录,新建后重新编译。
shell> mkdir /usr/local/man shell> mkdir /usr/local/man/man1 //===================
如果make install时没有-lib $ls libjpeg* libjpeg.la libjpeg.doc libtool 没出现要的libjpeg.so libjpeg.so.62 libjpeg.so.62.0.0 add:
$make install -lib $ls /usr/local/lib libjpeg.la libjpeg.so libjpeg.so.62 libjpeg.so.62.0.0 安装qtopia
cd $QPEDIR export QTDIR=$QTEDIR export PATH=$QPEDIR/bin:$PATH export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH ./configure make make install cd image/opt/Qtopia
mkdir demohome //===================
qtopia安装完整后 其下有一个image目录,有关qtopia所有东西都在里面 运行一个例子 保证环境变量 export QTEDIR=/root/qtopia/qt-2.3.10-host export QT2DIR=/root/qtopia/qt-2.3.2 export TMAKEDIR=/root/qtopia/tmake-1.13 export QPEDIR=/root/qtopia/qtopia-2.1.1-host export QTDIR=$QTEDIR
export PATH=/root/qtopia/qt-2.3.10/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin: /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/root/qtopia/tmake -1.13/bin:$PATH export LD_LIBRARY_PATH=/root/qtopia/qtopia-2.1.1-host/lib:/root/qtopia/qt-2.3.10 -host/lib:/root/qtopia/tmake-1.13/lib:$LD_LIBRARY_PATH 可以正常的显示Virtual framebuffer,我们可以通过下面的命令在Virtual framebuffer 中实现Qtopia。
cd /root/qtopia/qtopia-2.1.1-host/bin qvfb & sleep 10 ./qpe.sh 可以看到界面.但是不能运行apps 编译已经完成了,Qtopia 2.1.1自由版中没有提供启动脚本,我们来写一个: vi root/qtopia/shell/demo.sh 下面是shell文件内容
#!/bin/sh source /root/qtopia/shell/initial.sh export QTDIR=/root/qtopia/qtopia-2.1.1-host/image/opt/Qtopia
export QPEDIR=/root/qtopia/qtopia-2.1.1-host/image/opt/Qtopia export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH export PATH=$QPEDIR/bin:$PATH findproc() {
/bin/ps -e | /bin/sed -n -e '/\<'$1'\>/ s/^ *\([0-9][0-9]*\).*/\1/p' } killproc() {
pid=`findproc $1` [ "$pid" != "" ] && kill $pid } killall quicklauncher
killall qpe killall qvfb [ -x /sbin/fuser ] && ( /sbin/fuser -kn tcp 4242 || /sbin/fuser -kn tcp 4243 ) [ -x /bin/fuser ] && ( /bin/fuser -kn tcp 4242 || /bin/fuser -kn tcp 4243 ) echo "Stopping common sound deamons..."
artsd_pid=`findproc artsd` [ "$artsd_pid" != "" ] && kill $artsd_pid esd_pid=`findproc esd` [ "$esd_pid" != "" ] && kill $esd_pid echo "Starting qvfb..."
qvfb -width 240 -height 320 & sleep 5s
echo "Starting Qtopia 2.1.1..."
HOME=/root/qtopia/qtopia-2.1.1-host/image/opt/Qtopia/demohome qpe echo "Restarting killed sound deamons..."
[ "$artsd_pid" != "" ] && artsd & [ "$esd_pid" != "" ] && esd & 然后就是让这个shell文件生效了。
source root/qtopia/shell/demo.sh
可以看到主机上面有pda界面并可以运行程序 http://blog.csdn.net/qipnx/archive/2007/01/10/1479362.aspx
学习笔记----图形界面程序Qt安装及其在2410-s上的移植 Qtopia安装简要入门 常见编译错误集锦 强烈感谢网友乌鸦的耐心指点 呵呵!!!!
PS:交叉编译还在进行中,移植时出了问题。要感谢nanfansky的帮助哦!
成功拉再贴出来!
|
文件系统已经建立起来,该测试一下最新的Qtopia了。
qtopia-2.1.1:ftp://ftp.trolltech.com/qtopia/source/qtopia-free-source-2.1.1.tar.bz2
qt-embedded-2.3.10:ftp://ftp.trolltech.com/qt/source/qt-embedded-2.3.10-free.tar.gz
编译之前需要两个库的支持:
jpeg-v6b:%20/>
e2fsprogs-libs-1.37:
arm-linux-gcc
3.4.1编译e2fsprogs-libs的时候报告错误fd.h:342: error: variable or field `__user’
declared void,经查gcc 3.4.1中新增类型 __user ,需要引入编译器定义头文件,在引用#include
Qtopia的全程安装文档参见Trolltech的Building Qtopia from Source:
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
config for QT:
./configure -gif -system-jpeg -tslib -no-xft -depths 16 -thread -qconfig qpe -xplatform linux-ipaq-g++
make 能自动编译for x86的moc,却偏偏不生成for x86的uic,所以在编译Qtopia之前需要手工配置一套for x86的Qt Embedded tools,以得到tools/designer/uic for x86的Makefile,编译生成for x86的uic。
config for Qtopia:
参见:Customizing Qtopia for a Device
设置按键处理程序:etc/defaultbuttons-ipaq.conf
设置硬件相关处理程序:custom-linux-ipaq-g++.cpp
./configure -languages zh_CN -xplatform linux-ipaq-g++ -edition pda -no-qtopiadesktop
-without-
arm-linux-strip –strip-unneeded -R .note -R .comment去除调试信息。
虽 然已经把e2fsprogs-libs install到arm-linux目录下,而且默认是static方式的,但是编译qtopia的时候还是报告undefined reference to `uuid_generate’,看来是qtopia没有把uuid库包含进来,在src/global.pri中只有LIBS += -lm,加上-luuid,make clean,make,还是不行,那就不是qtopia的问题了,看http: //doc.trolltech.com/qtopia2.1/html/system-integrators-guide.html,觉得是 e2fsprogs-libs编译的不对,为什么在编译libqtopia的时候没有被发现呢?编译libqtopia.so的过程并没有因为这个错误停 下来,直到后面编译application的时候才引发这个错误,因为根本就找不到uuid_generate这个标号,qtopia这么牛的软件,不会 犯这种低级错误的。很明显,错误在e2fsprogs-libs上。于是,回到e2fsprogs-libs目录,configure 加入 –enable-elf-shlibs选项,make,lib/libuuid.so.1.2生成了,make install,再到qtopia目录下make clean,make,问题依旧。好好检查一下libuuid,file libuuid.so.1.2,显示是“Intel 80386”,问题就在这里,configure的参数没设置正确,configure –help仔细阅读,发现e2fsprogs-libs有两个特别选项–with-cc=COMPILER和–with-linker=LINKER,重 新./configure –host=arm-linux –with-cc=arm-linux-gcc –with-linker=arm-linux-ld –enable-elf-shlibs –prefix=/usr/local/arm/3.4.1/arm-linux,这回生成了ARM architecture的连接库,make install,回到qtopia目录,make clean & make,all errors over!这也说明了一开始对libqtopia编译过程的推断是对的。
qtopia的编译很需要时间,在它编译的时候写下这些文字,哈哈,效率越来越高了。 :)
排错的过程就是学习的过程!