现在的位置: 首页 > 综合 > 正文

libxml2在mingw中的使用

2013年10月02日 ⁄ 综合 ⁄ 共 1439字 ⁄ 字号 评论关闭

libxml2是一套非常好用的xml库,官网是http://www.libxml.org/,但是天知道是什么原因,此网页无法访问。

 

好不容易下载下来,在mingw中却问题多多。

第一个问题:

 

 

 

也就是说,编译通过了,但是在链接过程中找不到xmlFree等函数。

网上有人说,修改xmlexports.h文件,参考这里:http://blog.sina.com.cn/s/blog_4f183d960100dt2i.html和这里:http://mail.gnome.org/archives/xml/2004-February/msg00007.html。勉强可以编译过通过。但是总觉得修改库的头文件这种做法不太好。终于被我发现了,在xmlexports.h中有这么一段:

 

注释部分说的正是这个问题。我干脆将IN_LIBXML定义到代码里,编译果然没问题了。

但是我高兴得太早了,

第二个问题:

 

 

程序一运行就崩溃了!gdb看了一下,又是xmlFree!

原来,libxml2的windows二进制版本是用Microsoft C编译链接的,一般情况下,mingw中的pexport和dlltool都能链接到动态库并正常工作,除了dll库中的静态数据。libxml2中的xmlFree、xmlMalloc和xmlRealloc都是以静态变量的形式出现的。具体原因可以看这里:http://www.linuxquestions.org/questions/programming-9/[solved]using-libxml2-on-mingw-xmlfree-crashes-839802/

解决的办法是在xmlParseFile或者其它xml函数初始化DLL变量后,加入:

 

  if(!xmlFree) xmlMemGet(&xmlFree,&xmlMalloc,&xmlRealloc,NULL);

才能解决问题。

 

 

 

抱歉!评论已关闭.