首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > Suse Linux平台下XML4c解析库支持GB2312编码问题解决过程
【标  题】:Suse Linux平台下XML4c解析库支持GB2312编码问题解决过程
【关键字】:Suse,Linux,XML4c,GB2312
【来  源】:http://blog.csdn.net/buildsun/archive/2006/11/01/1360745.aspx

Suse Linux平台下XML4c解析库支持GB2312编码问题解决过程

一、背景:

    原来在Unix平台解析XML协议时使用的IBM公司的XML4c开发包,XML4c开发包本身起源于apache的开源项目Xercesc-C,IBM公司在Xercesc-C的基础上增加了多达150多种字符编码格式的支持;后来需要将操作系统由原来的Unix移植到Linux,因此需要得到支持SuseLinuxXml解析库。

 

二、寻找的过程

在登录到IBM关于XML4c的官方网站http://www.alphaworks.ibm.com/tech/xml4c,发现XML4c项目已经不再开发了,交还给了Apache,心里不禁凉了半截,因为原来ApacheXercesc项目虽然和XML4c接口都一样,但是最关键的是不支持GB2312编码!但是,天无绝人之路,硬着头皮接着读了一段E文发现:如果Xercescc-International Components for Unicode (ICU)一起编译得到的二进制库等价于Xml4c

 

XML4C has graduated.

XML4C now consists of Apache's Xerces-C XML Parser, which is distributed under the The Apache Software License, Version 1.1, and International Components for Unicode (ICU), which is distributed under the IBM Public License. These two components are available at the above links.

See also information about Unicode.

If Xerces-C is built with ICU, a library equivalent to XML4C will be created. Instructions for building Xerces-C with ICU can be obtained from Xerces-C's Web site. If you have any further questions concerning XML4C, please contact Lisa Martin.

 

于是兵分两路,先到Apache网站上下载Xercesc-C++的源代码和库,在http://xml.apache.org/xerces-c/上溜达了一圈后发现只有单独编译的Xercesc库没有和ICU联编的直接下载下来就能用的库,只好决定自己下载源代码编译XercescICU的联编库。

很顺利的在http://xml.apache.org/xerces-c/download.cgi下载到了Xercesc的源代码:xerces-c-current.tar.gz

但是找了半天没有找到ICU的下载地址,只好求助于号称连原子弹都能造出来的Google,幸运的是找到了一个IBMFTP

ftp://ftp.software.ibm.com/software/globalization/icu/3.4

在上述的FTP里成功下载到了icu-3.4-RHEL3-gcc3.2.3.tgz

需要说明的是都没有下载到直接支持Suse Linux的,只好抱着试试看的心情下载了支持RedHat的!

 

三、编译的过程

把上述两份文件分别解压后分别上传到Linux机器上的用户目录/home/zxin10,应该能够看见两个新目录/home/zxin10/xerces-c-src_2_6_0/home/zxin10/icu

.profile中设置环境变量、路径等,主要增加了:

PATH=$PATH::/home/zxin10/icu/bin:/home/zxin10/icu/lib

LD_LIBRARY_PATH=/home/zxin10/icu/bin:/home/zxin10/icu/lib   XERCESCROOT=/home/zxin10/xerces-c-src_2_6_0

  ICUROOT=/home/zxin10/icu

  export PATH LD_LIBRARY_PATH XERCESCROOT ICUROOT

设置好环境变量后同时还要进入$ICUROOT/bin$ICUROOT/sbin目录执行命令

zxin10@hpserver1:~/icu/bin> chmod +x *

修改文件的可执行权限!

做好上述设置后编译之旅就开始了

zxin10@hpserver1:~> cd $XERCESCROOT

zxin10@hpserver1:~/xerces-c-src_2_6_0> cd src/xercesc

zxin10@hpserver1:~/icu> unset LANG    /*说明这个命令主要是去掉字符集设置,否则出错信息可能为乱码 */

zxin10@hpserver1:~/xerces-c-src_2_6_0/src/xercesc> autoconf

zxin10@hpserver1:~/xerces-c-src_2_6_0/src/xercesc> ./runConfigure -plinux -cgcc -xg++ -micu -nsocket -ticu –rpthread

/* 说明:这个命令比较关键其中-micu –ticu表示是编译与ICU联编!*/

zxin10@hpserver1:~/xerces-c-src_2_6_0/src/xercesc> gmake

开始编译了。。。

 

第一次编译果然没有成功:)

pkgdata: No -O option found, trying 'icu-config --incfile'.

pkgdata: icu-config: using '-O /usr/local/lib/icu/3.4/Makefile.inc'

# Reading res-file-list.txt..

Warning: Found path 'XercesMessages_' in file name. Assuming compatibility (-E) mode.

# Output file: ./lib$(LIBNAME).so

/usr/bin/gmake  -f ./XercesMessages_dll.mak

gmake[3]: Entering directory `/home/zxin10/xerces-c-src_2_6_0/src/xercesc/util/MsgLoaders/ICU/resources'

./XercesMessages_dll.mak:14: /usr/local/lib/icu/3.4/Makefile.inc: Permission denied

 

仔细研究后发现可能里面有些默认文件的默认路径没有修改,于是顺藤摸瓜,发现这句

pkgdata: icu-config: using '-O /usr/local/lib/icu/3.4/Makefile.inc'“,

明明我设置的路径不是这个啊!于是进入$ICUROOT/bin打开icu-config一看,发现了

这一句:

    default_prefix="/usr/local"

毫不犹豫的就把他修改成了default_prefix="/home/zxin10/icu"

重新编译,这一关顺利过去,但又出现类似错误

/home/zxin10/icu/lib/icu/3.4/Makefile.inc:258: /usr/local/share/icu/3.4/config/mh-linux: No such file or directory 有了上次的经验,很快就打开Makefile.inc文件将其中的

prefix = /usr/local修改成了 prefix=/home/zxin10/icu

再重新编译,就一路顺风,终于见到了OK两字!

 

迫不及待的进入zxin10@hpserver1:~/xerces-c-src_2_6_0/lib> 执行LL命令查看

终于出现了梦寐以求的.so库,真是欣喜若狂!

 

 

 

四、使用的过程

看看右下角的时间,提前吃中饭的时间已经到了,由于心情迫切,我第一次没有提前去吃中饭。

将目录zxin10@hpserver1:~/xerces-c-src_2_6_0/lib>中的所有文件主要包括:

libxerces-c.so

libxerces-c.so.26

libxerces-c.so.26.0

libxerces-depdom.so

libxerces-depdom.so.26

libxerces-depdom.so.26.0

libXercesMessages.so

libXercesMessages.so.26

libXercesMessages.so.26.0

 

拷贝到了zxin10@hpserver1:~/lib>(这是应用程序Lib路径)

然后执行编译命令,看着打印信息如行云流水一般向上翻页,真是心情舒畅啊,正在得意之际,突然嘎然而止,定睛一看提示的是

/home/zxin10/lib/libxerces-c.so: undefined reference to `XercesMessages_dat'”头皮不禁有点发麻,难道编译的库有问题?正百思不得其解之际,发现“XercesMessages_dat”和“libXercesMessages.so.26“有太多的字母一样了,不由得不让我不把它们联系到一起。难道是makefile中没有load?可是我清晰的记得再NT版本下不需要包含,只要包含一个Xercesc的库就可以了!只有抱着试试看看的态度,打开/home/zxin10/src/os/makefile,增加了一个LDLIBS=-lXercesMessages

再编译,终于通过生成了可执行文件,经过简单验证,向业务程序发送带有中文的GB2312编码的XML消息,终于解码成功!!

这里不得不感谢上周末的科室活动,使得工作效率空前提高:)

 
LPC2210调试:【上一篇】
Linux核心数据结构:【下一篇】
【相关文章】
  • [-学习随笔-] 问题:在windows和linux下运行正常,solaris出现中文问题~
  • Linux C++ 动态加载共享库
  • 学习Linux网络服务配置时做的笔记!
  • 【转帖】给Linux新手
  • 赛门铁克携手红旗共推Linux存储解决方案
  • Linux 笔记本基于 “敲打” 的命令
  • 在window下编写linux代码
  • Linux C++程序运行的问题
  • Linux下使用CUPS提供打印服务
  • 教教你用Linux 防火墙保护你的ADSL连接
  • 【随机文章】
  • 传奇世界 铁血魔城怪物掉宝攻略(权威版)
  • Why does someone perfer #if defined to #ifdef
  • 用mod_rewirte解决referer攻击
  • Struts Classic 的变迁(下),从1.1到1.2
  • CowNew开源-实际例子学正则表达式
  • 黑客帝国屏保
  • 类似QQ秀的魔法表情
  • 三国志10曹操之路
  • Team Foundation Server 1.0如期发布
  • pCase 函数源程序
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.