mini2440基于qtopia2.2的电子词典ZBEDIC的移植过程

发布时间:2020-06-18 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了mini2440基于qtopia2.2的电子词典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 libbedic
tar 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 directory
In file included from helpdialog.cpp:30:
zbedic.h:68: error: 'StaticDictionary' was not declared in this scope
zbedic.h:68: error: template argument 1 is invalid
zbedic.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 scope
make: *** [.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应用程序》
这篇文章的仁兄。
最后,移植 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 是否可以执行了。还有自己添加字典吧!
下面再把我制作适用于mini2440-qtopia的zbedic和libbedic的补丁也发出来吧,打补丁和编译的方法如下:
cd libbedic
patch -p1 < ../libbedic.patch
make
cd zbedic
patch -p1 < ../zbedic
make -f Makefile.target
下面附件里面有我制作 zbedic和libbedic的 补丁和用于mini2440-ARM的zbedic二进制程序。
这里不知道怎么回事,不太容易上传附件,大家就去论坛里面下载吧:
http://www.arm9home.net/read.php?tid=16010&page=1&toread=1#tpc

总结

以上是脚本之家为你收集整理的mini2440基于qtopia2.2的电子词典ZBEDIC的移植过程全部内容,希望文章能够帮你解决mini2440基于qtopia2.2的电子词典ZBEDIC的移植过程所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478
脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!