Windows + MinGW环境下使用libxml2 (1) 安装已编译包

时间:2021-01-26 04:52:02

写在新年钟声即将敲响之际,瑾以此文纪念忙碌的2010

 

libxml2是一款开源的、跨平台的XML解析工具,在Windows下使用当然也不是问题,方法有两种,一是从下载已经编译好的二进制包,二是下载源代码自行编译。我们公司在Windows下的开发环境通常是MinGW + Code::Blocks,因此本文针对的是在此前提下编译和使用libxml2所遇到的问题。
 
已编译包下载:http://xmlsoft.org/sources/win32/
源代码包下载:http://xmlsoft.org/sources/
 
libxml2是依赖于libz库和libiconv库的,在使用之前应该先检查一下你的MinGW是否已装有相关的库文件和头文件。
 
首先讲一下已编译包的使用,安装方法很简单,解包后,分别将bin、include、lib文件夹里的文件或子文件夹拷贝到MinGW的同名文件夹即可。
 
接下来可以试一下libxml2自带的例子。在Code::Blocks中创建一个“Empty project”,工程名随意,然后新建一个C语言程序,程序名也随意,因为是试一下,所以Build target选上Debug即可。然后把libxml2自带的例子example文件夹下的gjobread.c的内容复制粘帖到新建的文件。Project build options --> Debug --> Linker settings,要加上libxml2依赖的几个库:libiconv.a、libwsock32.a、libxml2.lib和libz.a,如下图:
 
Windows + MinGW环境下使用libxml2 (1) 安装已编译包
 
编译的话,可能会遇到下图这样的错误:
 
failure to convert GBK to UTF-8
 
Windows + MinGW环境下使用libxml2 (1) 安装已编译包
 
这是因为我在Global compiler settings中,把默认的编译器设置加上“-finput-charset=GBK”标志了,解决方法有两个,其中一个是把这个设置去掉,如果它有存在的必要,那么可以修改头文件路径下的iconv.h,出错的地方是注释里的一些特殊符号,例如下图fromcode、tocode等地方的引号:
 
Windows + MinGW环境下使用libxml2 (1) 安装已编译包
 
如果用vim打开的话,可能是这样的,可以比较一下它们的明显差别:
 
Windows + MinGW环境下使用libxml2 (1) 安装已编译包
 
在Code::Blocks中把这些字符替换为英文的单引号,保存iconv.h,这个问题就解决了。
 
编译好之后,把该程序需要读取的gjobs.xml拷贝到Code::Blocks工程所在的路径,并且在Project --> set program's arguments设置程序的输入参数为gjobs.xml,如下图:
 
Windows + MinGW环境下使用libxml2 (1) 安装已编译包
 
那么就可以执行了,测试结果:

 

Windows + MinGW环境下使用libxml2 (1) 安装已编译包