标题
在x86 linux主机上编译OPIE-1.2.2的详细过程 [zt 加我自己的一些重要提示!]
我是马甲
浏览(0) +
2007-06-06 16:56:51 发表
编辑
关键字:
在x86 linux主机上编译OPIE-1.2.2的详细过程
在x86 linux主机上编译OPIE-1.2.2的详细过程
作者:李德
Email:mailtolide@sina.com
时间:2007-1-5
今天在Fedora 6主机上成功编译OPIE-1.2.2(Open Palmtop Integrated Environment,即掌上电脑开放集成环境),因为中间也经历了一些小波折,故特此撰文,希望能对进行同样工作的新手有所帮助。应该说最好的是一个全安装的Redhat 9,我的是Fedora 6,gcc的版本比较高是gcc4,所以问题也比较多。下面就以Fedora 6为平台说明安装过程。
一.主机环境准备
1. 先检查主机下面的包是否安装:
libfreetype6-dev
libjpeg62-dev
libpam0g-dev
libpng12-dev
zlib1g-dev
libbluetooth1-dev
libpcsclite-dev
pkg-config
可能你的机器中包的名称不一定和上面的完全一样,最好在Fedora的“添加删除程序”中搜索关键字,我分别搜索了freetype,jpeg,pam,png,zlib,bluetooth,pcsc和pkg,找到的包名分别是:
freetype-devel-2.2.1
libjpeg-devel-6b
pam-devel-0.99
libpng-devel-1.2.10
zlib-devel-1.2.3
libbluetooth1-dev <=这个没找到,后面出了问题,不过也找到了解决办法
pcsc-lite-libs-1.3.1
pkgconfig-0.21
2.准备文件夹
我的文件夹是这样的,先在home下建立一个opiehome的文件夹,作为工作目录。
mkdir /home/opiehome
exports OPIEHOME=/home/opiehome
上面的两句你可以根据自己的情况设定,下面我们按照相对路径说明
cd $OPIEHOME
二、软件下载准备
1.Opie-1.2.2
下载地址:http://opie.handhelds.org/feed/source/stable/opie-1.2.2.tr.bz2
下载后解压到$OPIEHOME.名称为opie-1.2.2
tar jxvf opie-1.2.2.tr.bz2 –C $OPIEHOME
你也可以从cvs下载,相关命令如下:
cvs -d:pserver:anoncvs@cvs.handhelds.org:/cvs login
然后提示输入密码,密码是anoncvs,(注意:此时当前目录应该是$OPIEHOME,如果不是就cd $OPIEHOME)然后输入:
cvs -z3 -d:pserver:anoncvs@cvs.handhelds.org:/cvs co opie
等一会儿,就开始下载了,比较慢,耐心点哦,我是根据上面的地址用讯雷下的。
用cvs下载后可能名称不是opie,如果你是新手,为方便按照文档走,请改名为opie-1.2.2。
mv opie opie-1.2.2
2.qt-embedded-2.3.10
下载地址:
ftp://ftp.trolltech.com/pub/qt/source/qt-embedded-2.3.10-free.tar.gz
下载后解压到$OPIEHOME.名称为qt-2.3.10
tar zxvf qt-embedded-2.3.10-free.tar.gz
3.uic
为了编译Opie ,需要下载QT/Embedded,但是为了编译QT/Embedded,又需要QT/X11的 uic编译器(它将qt2-designer创建的UI格式的文件转换成cpp文件),你可以下载QT/X11编译生成uic,也可以从网上下载一个uic。
cd $OPIEHOME
wget http://vanille.de/tools/uic-qt2
下载后改变权限
chmod u+rx uic-qt2
4. qvfb
为了在x86 Linux平台上运行Opie,需要qvfb (Qt Virtual Frame Buffer),就像uic一样,你也可以从网上直接下载一个:
wget http://vanille.de/tools/qvfb-qt2
下载后改变权限
chmod u+rx qvfb-qt2
同样,你还可以在http://vanille.de/tools/中下载designer-qt2, linguist等其它工具,不过现在就opie的编译和运行,有上面的就足够了。
三、编译Qt/Embedded
1. 设置环境变量
export QTDIR=$OPIEHOME/qt-2.3.10
export OPIEDIR=$OPIEHOME/opie-1.2.2
2. 链接uic和qvfb
cd $QTDIR
mkdir bin
ln -s $QTDIR/../uic-qt2 bin/uic
ln -s $QTDIR/../qvfb-qt2 bin/qvfb
3. 给Qt/Embedded打补丁
ln -s $OPIEDIR/qt/qconfig-qpe.h src/tools/
patch -p1 < $OPIEDIR/qt/qt-2.3.10.patch/qte-2.3.10-all.patch
4. 配置和编译
./configure -qconfig qpe -depths 4,16,24,32 -system-jpeg -system-libpng -system-zlib -no-xft -qvfb
make
编译过程出现错误:
错误一:
error: ‘QWSInputMethod’ has not been declared
修正方法:
cd $QTDIR/src/kernel //$DTDIR=/home/opiehome/qt-2.3.10
gedit qwindowsystem_qws.h
在前面增加以下两行
class QWSInputMethod;
class QWSGestureMethod;
错误二:
qvaluestack.h:57: 错误:不能从 ‘QValueListIterator’ 转换到 ‘const char*’,为实参 ‘1’(属于 ‘int remove(const char*)’)
修正方法:
gedit $QTDIR/include/qvaluestack.h &
将remove( this->fromLast() );改为this->remove( this->fromLast() );
5. 设置环境变量PATH
export PATH=$QTDIR/bin:$PATH
四、编译OPIE
1. 配置和编译
cd $OPIEDIR
make clean
make menuconfig
make
注意:make clean命令结束的时候可能会启动一大堆yes和no的配置选项,我索性Ctrl+z结束了,因为make menuconfig中有友好界面的详细配置。
编译过程出现错误:
错误一:
/home/opiehome/opie-1.2.2/inputmethods/dasher/QtDasherScreen.h
修正方法:
将QtDasherScreen::~QtDasherScreen();改为~QtDasherScreen();
将 long QtDasherScreen::get_time();改为long get_time();
错误二:
output.c: In function ‘int mpeg3video_ditherframe
修正方法:
/* modified by lide
#define STORE_PIXEL_RGB565 \
*((unsigned short*)data)++ = \
((CLIP(r_l) & 0xf8) << 8) | \
((CLIP(g_l) & 0xfc) << 3) | \
((CLIP(b_l) & 0xf8) >> 3);
*/
#define STORE_PIXEL_RGB565 \
*data++ = CLIP(r_l); \
*data++ = CLIP(g_l); \
*data++ = CLIP(b_l);
错误三:
找不到opietooth1,于是返回make menuconfig,发现bluetooth没有选中,于是选中
错误四:
又有错误,/home/opiehome/opie-1.2.2/noncore/net/opietooth/lib/bt-serial.c中
#include
#include
#include
#include
这四个头文件找不到。
修正方法:
于是在qtopia-4.2.0/src/3rdparty/libraries/bluez/bluetooth中发现有这几个文件。
索性将bluetooth文件夹拷贝到/usr/include/bluetooth
mkdir /usr/include/bluetooth
cp qtopia-4.2.0/src/3rdparty/libraries/bluez/bluetooth/* /usr/include/bluetooth
再次编译,等待好久,终于编译成功啦!
2. 设置环境变量
新建一个文件/home/opiehome/opie-exports.bat,内容如下:
export OPIEHOME=/home/opiehome
export QTDIR=$OPIEHOME/qt-2.3.10
export OPIEDIR=$OPIEHOME/opie-1.2.2
export LD_LIBRARY_PATH=$QTDIR/lib:$OPIEDIR/lib
export PATH=$QTDIR/bin:$OPIEDIR/bin:$PATH
export QWS_DISPLAY=QVFb:0
存盘,执行
source /home/opiehome/opie-exports.bat
3. 运行
启动opie
$QTDIR/bin/qvfb &
$OPIEDIR/bin/qpe
就会看到效果啦
我是马甲
来自 http://www.hzlitai.com.cn/bbs/dispbbs.asp?boardid=5&id=6378
其实在 redhat 9 下 qt 我是一次性通过(牛啊,首次一次编译linux程序成功).
"找不到opietooth1" 的问题嘛,兄弟我还是学过一段 gcc 的.所以直接改了一个最后一行命令再执行就可以了.因为它和编译过程太久,实在不想等.我修改的后命令行为:
g++ -Wl,-rpath-link,/home/vinko/opiehome/opie-1.2.2/lib -Wl,-rpath,/home/vinko/opiehome/qt-2.3.10/lib -shared -Wl,-soname,libopieobex.so.0 -Wl,-rpath -L/home/vinko/opiehome/qt-2.3.10/lib -lqpe -lopiecore2 -L/home/vinko/opiehome/opie-1.2.2/lib -lqte
这样做的另外一个原因是,我实在找不到在哪里设置要编译 opietooth1 .我进行 make menuconfig 的时候基本上是完全无知,直接保存默认设置了事--以后再说.
总的来说感觉不错,除了 apache 这是我编译最顺利的开源程序了.不过这样生成的 opie 似乎是不能直接在 arm 机器上运行.
不过 qvfb 生成的屏幕似乎太小了,刀远远没有我在真实arm机器上看到的漂亮.另外我是在 Xmanager Enterprise 的 xhell 下执行的,如果您是 telnet 的可能会看不到 X 的界面的. 总结 Xmanager 实在是个好东西.
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.