使用Perl封装的WBXML的方法编写者
日期
关键词
郑昀@ultrapower
2005-9-20
WBXML XML Perl
利用Perl库XML::WBXML,
就可以执行XML和WBXML(Wap Binary XML)之间的自由转换了:
use XML::WBXML;
$wbxml = XML::WBXML::xml_to_wbxml($xml);
$xml = XML::WBXML::wbxml_to_xml($wbxml);
下面我说一下如何编译这个包。
第一步:到http://libwbxml.aymerick.com/download.php下载Aymerick Jehanne用C++编写的DLL库
WBXML Library v0.9.0 (download)
第二步:到http://search.cpan.org/dist/XML-WBXML/lib/XML/WBXML.pm
下载
,这是Perl封装libwbxml2.dll的库。
第三步:在编译XML-WBXML之前,你必须先修改XML-WBXML-0.02.tar.gz中的Makefile.pl,因为原先它没有指定要link外部的lib。否则当你make时将看到这样的错误:
编译错误:
正在创建库 blib\arch\auto\XML\WBXML\WBXML.lib 和对象
blib\arch\auto\XML\WBXML\WBXML.exp
WBXML.obj : error LNK2019: 无法解析的外部符号 _wbxml_conv_xml2wbxml@16 ,该符号
在函数 _XS_XML__WBXML_xml_to_wbxml 中被引用
WBXML.obj : error LNK2019: 无法解析的外部符号 _wbxml_conv_wbxml2xml@16 ,该符号
在函数 _XS_XML__WBXML_wbxml_to_xml 中被引用
blib\arch\auto\XML\WBXML\WBXML.dll : fatal error LNK1120: 2 个无法解析的外部命令
NMAKE : fatal error U1077: “link” : 返回代码“0x460”
所以,必须加入“MYEXTLIB => 'libwbxml2.lib'”的编译选项:
Makefile.PL:
use 5.008003;
use ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
NAME => 'XML::WBXML',
VERSION_FROM => 'lib/XML/WBXML.pm', # finds $VERSION
PREREQ_PM => {}, # e.g., Module::Name => 1.1
ABSTRACT_FROM => 'lib/XML/WBXML.pm', # retrieve abstract from module
AUTHOR => 'David Glasser <glasser@bestpractical.com>',
LIBS => ['-lwbxml2'], # e.g., '-lm'
DEFINE => '', # e.g., '-DHAVE_SOMETHING'
INC => '-I.', # e.g., '-I. -I/usr/include/other'
# Un-comment this if you add C files to link with later:
#add begin
MYEXTLIB => 'libwbxml2.lib',
# OBJECT => '$(O_FILES)', # link all the C files too
);
第四步:为了拿到libwbxml2.lib,你必须编译WBXML Library v0.9.0源代码,从而得到这个lib。
并将源代码中的头文件如wbxml.h、wbxml_parser.h等复制到Perl\lib\XML文件夹下,因为编译时需要这些wbxml的头文件。
第五步:在perl编译出WBXML.DLL之后,要将
libwbxml2.dll和libexpat.dll放在Perl\lib\XML\blib\arch\auto\XML\WBXML文件夹下。