Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541256
  • 博文数量: 150
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-17 00:19
文章分类

全部博文(150)

文章存档

2011年(1)

2009年(14)

2008年(135)

我的朋友

分类:

2008-05-17 17:40:17

目的是要用qvfb显示我开发的程序,加快调试:

=======================================

参考
出了几次错,主要是:






 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






qt-2.3.7/examples/下的hello文件夹下文件编译报错
 
[mark hw]$
[mark hw]$ make
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -fno-default-inline \
-DNO_DEBUG -I/opt/Qtopia/include -o hello.o hello.cpp
gcc -o hw hello.o -L/opt/Qtopia/lib -lm -lqte
/opt/Qtopia/lib/libqte.so: undefined reference to `QWizard::staticMetaObject()'
collect2: ld returned 1 exit status
make: *** [hw] Error 1

[mark hw]$新加qtopia


 解决---修改: 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 
     







参考:http://blog.chinaunix.net/u/23458/showart_179424.html进一步学习!


==========21:09
后来出现usr/ld cannot find lqtopia
重新编看看怎么样?

看资料说是libuuid的问题,就重新编e2fsprogs成主机上的,然后把

cp -a /pxa255/e2fsprogs/lib/uuid  include/
但还是出错
直至
cp /pxa255/e2fsprogs/build/lib/libuuid.a /usr/lib/



========================具有libjpeg的qtopia==========
 安装
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 2.1.1
Filed under: 努力工作 — panjet @ 14:58:03

文件系统已经建立起来,该测试一下最新的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 的前面加上#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的编译很需要时间,在它编译的时候写下这些文字,哈哈,效率越来越高了。 :)
排错的过程就是学习的过程!


阅读(2736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~