qtopia2电子词典ZBEDIC (含移植过程还有我制作的拼音输入法压缩包)



根据这个地址http://bedic.sourceforge.net/知道这个ZBEDIC原先是使用在Sharp Zaurus 这个PDA的qtopia上面的,那么移植到mini2440上面去,也是可以的,不过得经过下面这些修改才可以:

zbedic 和 libbedic 的源码就到http://sourceforge.net/projects/bedic/files/地址里面后缀为src的开始两个文件夹里面下载最新的tgz包即可。
依据这个http://bedic.sourceforge.net/doc/zbedic-install.html地址和zbedic源码包里面README上面的提示,我们首先得移植sqlite3到开发板上面,我使用的是以前在mini2440上移植minigui电子菜单时下载的一个sqlite-3.6.12,大家可以在网上找找,用别的版本,可能会有错误。

一、sqlite的移植
1. 解压sqlite-3.6.12,进入sqlite源码目录,运行命令:./configure --host=arm-linux --prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib --disable-tcl 来生成Makefile文件。

2. 运行 make 对 sqlite 源代码进行编译。

3. 运行 make install 进行安装,安装到/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi 这个目录的目的是为了以后编译 libbedic 的时候使用 -lbedic 这个链接lib库选项。


二、libbedic 的编译
1. 解压:
mkdir libbedictar xzvf libbedic_1.1-0.tgz -C libbedic

2. 修改 Makefile,在 ifeq ($(ARCH),arm) 语句前,添加 ARCH = arm

3. (1) 运行 make , 遇到如下错误:

src/shcm.cpp:64: error: 'calloc' was not declared in this scope

那么就在 src/shcm.cpp 开头添加 #include <stdlib.h> 或者 #include <cstdlib> 都可。
(2)继续 make,又有下面的错误:

src/dynamic_dictionary.cpp:28:21: error: sqlite3.h: No such file or directory

很简单,只需要 cpsqlite-3.6.12-arm/sqlite3.h ./src/ ,然后修改src/dynamic_dictionary.cpp 第28行,将 #include<sqlite3.h> 修改为 #include"sqlite3.h" ,
(3)继续 make,又遇到如下错误:

src/dynamic_dictionary.cpp:69: error: extra qualification 'SQLiteDictionary::' on member 'findNext'

那么就把 src/dynamic_dictionary.cpp 第69行 findNext 前面的SQLiteDictionary:: 删除继续 make, 后面又遇到类似的错误,用同样的方法即可。
(4)make 后,又遇到的错误:

src/format_entry.cpp:53: error: 'strcmp' was not declared in this scope

那么就到src/format_entry.cpp 前面把 #include <string> 修改为 #include <string.h> 或 #include <cstring> 都可

src/xerox.cpp:244: error: 'LONG_MAX' was not declared in this scope

那么就到src/xerox.cpp 前面添加 #include <limits.h> 或 #include <climits>
4. 当libbedic根文件中出现 objs.arm 文件夹,就表示编译成功了。


三、 zbedic 的编译。
1. 在libbedic 文件夹上层,解压 zbedic 源码包,进入 zbedic 文件夹,阅读 README,但是这里面的编译说明是为Sharp Zaurus 这个PDA QTOPIA环境做准备的,不适合mini2440的qtopia,此时就需要修改源码,并以友善提供的arm-qtopia内的工具作为开发环境。


2. 进入 zbedic 的 src 文件夹中运行命令:
(1) 设置环境变量 source /opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/setQpeEnv
(2) 建立 pro 项目文件,生成 src.pro
qmake -project

(3) 运行qmake -spec qws/linux-arm-g++ -o Makefile.target *.pro
生成 Makefile.target遇到以下错误: Project ERROR: Please set a target in /media/sf_cyx/Application/zbedic-libbedic/libbedic/src


解决方法: 修改 src.pro 文件内容,在开头添加 TARGET = zbedic 之后,重新运行“qmake -spec qws/linux-arm-g++ -o Makefile.target *.pro”命令

(4) 运行 make -f Makefile.target clean 清除以前的目标文件


(5) 运行 make -f Makefile.target 遇到以下错误:
zbedic.h:37:19: error: bedic.h: No such file or directoryIn file included from helpdialog.cpp:30:zbedic.h:68: error: 'StaticDictionary' was not declared in this scopezbedic.h:68: error: template argument 1 is invalidzbedic.h: In member function 'int DictList::compareItems(void*,void*)':zbedic.h:73: error: 'StaticDictionary' was not declared in this scope ............


解决方法: 从 libbedic 的 include 目录中将所以头文件拷贝到 zbedic 的 src 目录下。

(6) 继续运行make -f Makefile.target 遇到以下错误: helpdialog.cpp: In constructor 'HelpDialog::HelpDialog(QWidget*)':helpdialog.cpp:52: error: expected ')' before 'PREFIX_PATH'make: *** [.obj/release-shared/helpdialog.o] Error 1

解决方法: 将 helpdialog.cpp 第52行的browser->setSource( "file:://" PREFIX_PATH "/share/doc/zbedic/zbedic.html" ); 修改为browser->setSource( "/usr/share/doc/zbedic/zbedic.html" );

(7)继续运行make -f Makefile.target 遇到以下错误: settings.cpp: In constructor 'ZBEDicSettings::ZBEDicSettings(QWidget*)':settings.cpp:142: error: expected ')' before 'VERSION'settings.cpp: In member function 'void ZBEDicSettings::updateFontSizes()':settings.cpp:425: error: 'abs' was not declared in this scopemake: *** [.obj/release-shared/settings.o] Error 1

解决方法: 将 settings.cpp 第142行的setCaption( tr( "ZBEDic Settings (v. " VERSION ")" ) ); 修改为setCaption( tr( "ZBEDic Settings (v.1.2-2 )" ) );并在 settings.cpp 的开头 添加 #include <stdlib.h>

(8)继续运行make -f Makefile.target 遇到以下错误: .obj/release-shared/abstract_config.o: In function `AbstractConfig::setGroup(char const*)':abstract_config.cpp:(.text+0x4f0): undefined reference to `Config::setGroup(QString const&)'.obj/release-shared/abstract_config.o: In function `AbstractConfig::writeEntry(char const*,bool)':abstract_config.cpp:(.text+0x528): undefined reference to `Config::writeEntry(QString const&,bool)' .................. obj/release-shared/settings.o: In function `ZBEDicSettings::createNewDic()':settings.cpp:(.text+0xc6c): undefined reference to `createSQLiteDictionary(char const*,char const*,std::basic_string<char,std::char_traits<char>,std::allocator<char> >&)'.obj/release-shared/zbedic.o: In function `ZBEDic::createHybridDic()':zbedic.cpp:(.text+0xbb0): undefined reference to `createHybridDictionary(char const*,StaticDictionary*,std::allocator<char> >&)' .................... . /../libbedic/objs.arm/libbedic.a(dynamic_dictionary.o): In function `SQLiteDictionary::getDB()':/media/sf_cyx/Application/zbedic-libbedic/libbedic/src/dynamic_dictionary.cpp:186: undefined reference to `sqlite3_open'/media/sf_cyx/Application/zbedic-libbedic/libbedic/src/dynamic_dictionary.cpp:192: undefined reference to `sqlite3_create_collation ' ................... 解决方法: 将 Makefile.target 中的
LIBS = $(SUBLIBS) -luuid -L/opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/lib -L/opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/lib -lqte

修改为:

LIBS = $(SUBLIBS) -luuid -L/opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qtopia/lib -lqpe -L/opt/FriendlyARM/mini2440/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/lib -lqte -L../../libbedic/objs.arm -lbedic -lsqlite3


至此,zbedic 完全编译成功,以上错误的修正,还得感谢写《交叉编译基于qt/e 2.3.10 的qtopia应用程序》 http://blog.chinaunix.net/space.php?uid=13750160&do=blog&id=2873568这篇文章的仁兄。
最后,移植 zbedic 到mini2440开发板的过程,可以参考一下友善之臂6410之Qt和Qtopia编程开发指南http://www.arm9home.net/read.php?tid-9360.html这篇文章,其中要记得把 sqlite3 的库文件 libsqlite3.so.0 拷贝到 开发板的/opt/Qtopia/lib 目录下面,还有记得到http://bedic.sourceforge.net/dict-list-keyword-lang.html下载字典文件也拷贝到开发板上面。重启开发板,就可以看到zbedic字典了,使用前记得添加字典。


我这里再提供一下我自己安装zbedic的方法:
1. 先使用http://www.arm9home.net/read.php?tid-15911.html里面的方法把mini2440的ipkg 软件包管理器修复好


2. 到http://sourceforge.net/projects/bedic/files/zbedic/1.2-2/zbedic_1.2-2_arm.ipk/download上面下载zbedic_1.2-2_arm.ipk,然后将这个包拷贝到开发板文件系统的 /root/Documents文件夹内,再点击 qtopia界面中“设置”这一页的“软件包”按钮,选择“Install from Documents”后,点击Next,之后管理器会找到zbedic_1.2-2_arm.ipk这个包,选中它,点击Next之后,就会有安装成功的提示。


3. 但是实际上zbedic 并不是安装到 mini2440 设置的 /opt/Qtopia 文件夹内的,而是在 /opt/QtPalmtop/文件夹内的,此时只需要 cp -rf /opt/QtPalmtop/* /opt/Qtopia/ ,然后再把我们自己编译好的 zbedic替换掉 /opt/Qtopia/bin/ 内的zbedic,最好再 chmod a+x zbedic 将zbedic的权限设为可执行。


4. 期间还得把 我们自己编译的libsqlite3.so.0 也拷贝到 /opt/Qtopia/lib/ 文件夹中去。重启开发板,再看看zbedic 是否可以执行了。还有自己添加字典吧!按照zbedic官网的说法添加字典: If searching for dictionaries does not work,try putting dictionary files under: ~/Documents/application/bedic/


下面再把我制作适用于mini2440-qtopia的zbedic和libbedic的补丁也发出来吧,打补丁和编译的方法如下:

cd libbedicpatch -p1 < ../libbedic.patchmake
cd zbedicpatch -p1 < ../zbedicmake -f Makefile.target

下面附件里面有我制作zbedic和libbedic的补丁和用于mini2440-ARM的zbedic二进制程序。 zbedic-libbedic-patch.zip(382 K) 下载次数:12

完整的电子辞典和
qtopia拼音输入法压缩包,我都已经制作好了,放在7楼里面!大家下去下载吧,哈哈!

我懒得在这里上传了,大家去http://www.arm9home.net/read.php?tid-16010.html这个论坛里面下载吧!帮我顶顶贴也是看得起我的辛苦劳动嘛!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SQLite架构简单,又有Json计算能力,有时会承担Json文件/RESTful的计算功能,但SQLite不能直接解析Json文件/RESTful,需要用Java代码硬写,或借助第三方类库,最后再拼成insert语句插入数据表,代码非常繁琐,这里就不展示了。参考前面的代码可知,入库的过程比较麻烦,不能只用SQL,还要借助Java或命令行。SPL是现代的数据计算语言,属于简化的面向对象的语言风格,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容,不算彻底的面向对象语言。...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。本教程将告诉您如何使用 SQLite 编程,并让你迅速上手。.................................
安卓开发,利用SQLite实现登陆注册功能
相比大多数数据库而言,具有等优势,广泛应用于、等领域。
有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数据库,就配置什么数据库即可。4.Users实体类,这个实体类要和数据库一样的,形成一一对应的关系。11.Sqlite数据库,需要在代码里面创建数据库,建立表,再建立数据。8.我们开启MySQL数据库,然后进行调试,看程序的结果。2.安装SqlSugar。
基于Android的背单词软件,功能强大完整。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。说白了就是使用起来轻便简单,
Android的简单购物车案例
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库...
Qt设计较为美观好看的登录注册界面(包含SQLite数据库以及TCP通信的应用)
SQLite是用C语言开发的跨平台小型数据库,可嵌入其他开发语言,也可在单机执行。SPL是用Java开发的跨平台的数据计算语言,可嵌入Java,可在单机执行,可以数据计算服务的形式被远程调用。两者的代码都是解释执行的。...
新建库.openDATA_BASE;新建表createtableLIST_NAME(DATA);语法:NAME关键字...<用逗号分割>删除表droptableNAME;查看表.schema查看表信息新建数据insertintoLIST_NAMEvalues();语法:CLASS,PARAMETER...,CLASS是类别,PARAMETER是参数<用逗号分割新建的
importsqlite3classDemo01:def__init__(self):self.conn=sqlite3.connect("sql_demo_001.db")self.cursor1=self.conn.cursor()self.cursor1.execute("select*fromtable_001wherename=?andid=?",('ssss&#0
 在客户端配置文件<configuration>节点下,添加:<connectionStrings>      <add name="localdb" connectionString="Data Source=config/local.db;Version=3;UseUTF16Encoding=True;" providerName="System.Data.SQLite.SQLiteFactory"/&g
提到锁就不得不说到死锁的问题,而SQLite也可能出现死锁。下面举个例子:连接1:BEGIN(UNLOCKED)连接1:SELECT...(SHARED)连接1:INSERT...(RESERVED)连接2:BEGIN(UNLOCKED)连接2:SELECT...(SHARED)连接1:COMMIT(PENDING,尝试获取EXCLUSIVE锁,但还有SHARED锁未释放,返回SQLITE_BUSY)连接2:INSERT...
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。在使用SQLite前,我们先要搞清楚几个概念:表
设计思想————首先要确定有几个页面、和每个页面的大致布局由于是入门,我也是学习了不是很长的时间,所以项目比较low。。。。第一个页面,也就是打开APP的首页面:今天这个博客,先实现添加功能!:首先对主界面进行布局:其中activity_main.xml的代码为<?xmlversion="1.0"encoding="