libxml2 在mingw中 xmlfree连接错误问题
原地址:http://blog.csdn.net/hongqun/article/details/6009684
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定义到代码里,编译果然没问题了。(转载tip:IN_LIBXML的定义应当在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);
才能解决问题。