免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7104 | 回复: 15
打印 上一主题 下一主题

[SCO UNIX] SCO OpenServer、UnixWare下libxml2库的编译 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-01-20 14:33 |只看该作者 |倒序浏览
1.        SCO OpenServer、UnixWare下libxml2库的编译

1.1.        编译libiconv
无论是OpenServer还是UnixWare,SCO的产品对于中文环境的支持都做得不是很好。虽然两者都提供了对iconv系列函数的实现,但能支持的字符集都相当有限,尤其是不能对gbk、gb18030等汉字字符集进行转换,给在XML中使用中文带来了困难。
为此,在libxml2库编译的过程中必须使用外带的iconv库替代操作系统所自带的iconv库。我所用的iconv支持库是libiconv-1.10。这个库的源代码能从下面链接下载:
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.10.tar.gz
当然,也可以使用其他版本的libiconv库。
除提供对西欧字符集的支持外,libiconv库还提供了对各种亚洲字符集(包括汉字、日文、韩文)的支持:
Chinese
EUC-CN, HZ, GBK, GB18030, EUC-TW, BIG5, CP950, BIG5-HKSCS, ISO-2022-CN, ISO-2022-CN-EXT
Japanese
EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP, ISO-2022-JP-2, ISO-2022-JP-1
Korean
EUC-KR, CP949, ISO-2022-KR, JOHAB
libiconv的编译过程很简单。首先,将源码包解压、解包,缺省解包后的路径为libiconv-1.10。进入libiconv-1.10目录,执行
        ./configure --enable-static=yes
增加”—enable-static=yes”选项是为了生成静态库。完成配置后,执行make编译libiconv库。
完成编译后,可以通过”make install”命令安装libiconv环境。
1.2.        编译libxml2
最新版本libxml2的源代码可以从www.xmlsoft.org获得。此处所使用的版本为libxml2 2.6.19。
在编译前需要定义环境变量LD_LIBRARY_PATH,将libiconv.a所在的目录加入到环境变量中。这是因为libxml2的configure配置脚本是从LD_LIBRARY_PATH所定义的路径中搜索libiconv.a,至于libiconv是静态库还是动态库倒没有关系。
其次,在SCO OpenServer下编译libxml2时,由于OpenServer的系统头文件没有定义PATH_MAX,需要在testModule.c中手工增加PATH_MAX的定义:
   #ifndef PATH_MAX
    #ifdef _POSIX_PATH_MAX
    #define PATH_MAX _POSIX_PATH_MAX
    #else
    #define PATH_MAX 255
    #endif
    #endif
PATH_MAX的值也可以定义为1024或其它的值,但应注意不要超过系统上限。
在UnixWare下不需要自己定义PATH_MAX。
接下去是运行configure配置脚本。在做这一步操作时必须要使脚本正确地找到libiconv的位置。有几种不同的方法可以供采用:
方法一:
./configure --with-iconv=/home/test/libiconv-1.10
其中”--with-iconv”用于指定iconv的源代码的存放目录,我们在这里假定/home/test/libiconv-1.10。需要注意的是这一目录必须使用绝对路径,否则编译时可能会出错。
方法二:
        ./configure CFLAGS=”-I/home/test/include”
        或者先设置环境变量CFLAGS=”-I/home/test/include”,然后直接执行
        ./configure
其中/home/test/include是libiconv的头文件iconv.h所在的目录。
以上两种方法的实质都是要找到正确的liniconv的头文件和支持库,用于替换系统自带的iconv。
configure完成环境配置后需要注意提示的信息中是否有以下信息:
   checking for iconv.h... yes
    checking for iconv... no
    checking for iconv in -liconv... yes
其中1、3行必须为”yes”,否则说明未能正确地找到iconv。第二行无关紧要。
接下去的工作就是执行make了。通过前面所说的几步操作,一般情况下都能正常完成编译过程。
1.3.        编译后的验证
我们的目标是获得能支持中文编码的xml支持库,因此测试的重点也主要放在对中文编码的xml文件上。
首先,运行libxml2自带的测试程序testapi,用于测试libxml2提供的函数的可用性。在使用SCO Openserver自带的iconv时,testapi程序会因为无法进行字符集转换而报许多错误;在使用libiconv替换后可以正常的通过测试。
第二,使用xmllint进行xml文件解析。xmllint是编译libxml2时得到的“副产品”。
手工创建一个xml文件(假设名称为a.xml),内容如下:
<?xml version=”1.0” encoding=”gbk”?>
<body>测试数据</body>
执行xmllint a.xml。正常的情况下应该能显示xml文件的内容。然后把xml文件中的encoding改为utf8,再次执行xmllint,会出现下面的提示:
a.xml:2: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xB2 0xE2 0xCA 0xD4
<body>测试数据</body>
这就说明编译出的程序确实能支持中文编码。
最后,自己写程序验证。参照libxml2提供的示例,最简单的程序基本如下:
xmltest.c:
#include <stdio.h>

#include "libxml/parser.h"
#include "libxml/tree.h"

main( int argc, char **argv )
{
    xmlDocPtr doc;

    if( (doc = xmlReadFile( argv[1], NULL, 0)) == NULL )
    {
        printf( "error!\n" );
        exit( -1 );
    }

    printf( "OK!\n" );

    xmlCleanupParser();

    exit( 0 );

}
cc –belf –o xmltest xmltest.c –I/home/test/include –L/home/test/lib –lxml2 –liconv –lm –lsocket
编译成功后执行xmltest a.xml,并重复类似xmllint所做的测试。当然,也可以编写更全面的测试程序进行测试。

[ 本帖最后由 sunlan 于 2006-1-20 14:35 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-01-20 16:58 |只看该作者
学习...

论坛徽章:
0
3 [报告]
发表于 2006-01-20 17:10 |只看该作者
原帖由 tchhyc 于 2006-1-20 16:58 发表
学习...


大家一起学习。这是我的libxml2学习笔记的一部分

论坛徽章:
0
4 [报告]
发表于 2006-01-20 17:17 |只看该作者
sunlan版主以后有空就多发些上来吧

论坛徽章:
0
5 [报告]
发表于 2006-01-25 14:14 |只看该作者
学习中...

论坛徽章:
0
6 [报告]
发表于 2006-01-25 17:22 |只看该作者
good study

论坛徽章:
0
7 [报告]
发表于 2007-03-23 08:47 |只看该作者
有人照这个方法编译成功过么??还是就我编译不对?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2007-03-23 09:20 |只看该作者
原帖由 cswallow 于 2007-3-23 08:47 发表
有人照这个方法编译成功过么??还是就我编译不对?


我照这个方法编译成功了.

论坛徽章:
0
9 [报告]
发表于 2007-03-23 13:32 |只看该作者
sunlan兄弟还在sco下搞开发呀!

论坛徽章:
0
10 [报告]
发表于 2007-03-24 11:49 |只看该作者
现在开发已经主要在Linux下搞了,但我开发的项目一般都会在SCO下做兼容性测试
去年有家客户要开发一套系统,并且坚持要在SCO下开发
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP