xerces-c和icu编译

 大伙在linux/unix上估计遇到过很多关于编码转换的问题,我也遇到了,在csdn上发了很多帖子,结果都没人给出一个好的解决办法,郁闷啊,经过不断的测试和摸索,最后在hu-unix-i11上解决了汉字编码转换的问题,在linux和别的平台上应该是类似的.

最开始遇到的问题就是不能转换汉字编码,运行示例的时候遇到如下的错误信息:

Could not create a converter for encoding: GBK

这个问题就需要用icu和xerces-c结合,编译出对应的xerces-c库就能解决问题.

1.下载icu,配置环境变量

    icu的全称是International Components for Unicode (ICU),官方网站是http://www.icu-project.org/,大家可以上去看看.

    我是从ftp://ftp.software.ibm.com/software/globalization/icu/3.4下载的icu-3.4.tgz,该ftp目录有多个下载资源,我选择了源代码下载,这一样我可以根据自己的需要来编译从不同平台库文件.

    上传icu-3.4.tgz到用户目录

    gunzip icu-3.4.tgz,得到icu-3.4.tar

    tar -xvf icu-3.4.tar,然后你会看到一个icu目录,进入icu目录,会看到bin,lib,source等目录

    打开用户目录下的.cshrc添加环境变量ICUROOT为icu的绝对路径.即ICUROOT=$HOME/icu,

    相应地修改别的环境变量,将$ICUROOT/bin添加到path中,将来$ICUROOT/lib添加到LD_LIBRARY_PATH中

    对于linux/unix配置文件为.profile,我当前用的是hp-unix,根据自己的环境变量修改用户配置文件即可.

 

2.编译原码

   有了源泉代码,配置好了环境变量,后面我们就可以用源代码编译出xerces-c中用到的目标库

   进入$ICUROOT/source,执行./configure命令,提示没有指定的对应的编译g++,gcc等

   由于我当前的环境是hp-unix,只有aCC和cc

   vi configure,在定义编译期列表的地方,加入了一个aCC

   然后执行./configure,没有出现错误

  接着执行gmake进行编译,没有出现任何错误,查看$ICUROOT/lib,成功编译出了相应的库文件,这时候高兴啊,但是高兴 得太早了,其实这时默认编译出的是64位的库文件,最后将xerces-c编译成64库,并运行示例程序的时候,提示错误信息,Could not load a transcoding service,比较之后得出结论,库文件位数的问题.

   如果按照一般的configure,gmake(或make)的办法成功编译,一般能成功运行,如果运气不好,就得采用如下保险的办法了.

   稳妥编译icu的方法应该先执行如下的命令:

   ./runConfigureICU HP-UX/ACC --disable-64bit-libs --prefix=/app/chenli/icu

   解释:指定了平台HP-UX/ACC,不使用64位编码(其实就是采用目标码位数32),安装路径/app/chenli/icu,编译成功之后,会把库文件安装到/app/chenli/icu/lib目录,头文件.h安装到/app/chenli/icu目录

 

3.下载xerces-c源代码,设置环境变量

    从www.apache.org上下载对应版本的xerces-c的源泉代码,上传的主机解压的当前用户目录.

    然后设置环境变量XERCESCROOT指向xerces-c的主目录,

 

4.编译、运行示例

   进入XERCESCROOT/src/xercesc,执行如下命令

   ./runConfigure -php-11 -ccc -xaCC -minmem -nsocket -ticu -rpthread -b32 -P/app/chenli/xerces-c-src_2_7_0

   解释:-p参数指定了系统平台,-c执行了c编译器cc,-x指定了c++编译器aCC,-t指定了采用icu,-b指定了生成32位目标代码,-P指定了安装目录

   上面命令执行成功之后,再执行gmake或者make命令

   执行gmake或者make编译成功之后,进入XERCESCROOT/samples目录,顺序执行如下命令

   ./runConfigure -php-11 -ccc -xaCC -rpthread -b32

   gmake

   都成功之后,进入XERCESCROOT/bin运行示例

   ./SAX2Print -x=GBK test.xml

   成功,没有出现以前的错误信息Could not create a converter for encoding: GBK

  

每一步都要注意平台和目标码位数,要达到一致,才能很好地运行.

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值