Windows + MinGW环境下使用libxml2 (2) 安装源代码包
2011-01-02 17:28
761 查看
安装已编译包相对简单,安装源代码包则比较麻烦,编译过程可能会因为机器的差别而遇到各种各样的问题。不过,如果时间允许的话,编译源代码时遇到问题也不是坏事,可能会因此而发现项目中潜在的问题。
libxml2在MinGW下编译需要用到msys,如果安装MinGW时选择默认选项,而不是全部安装的话,需要另外装上msys。本文编译的libxml2版本是2.7.7
此外,如果你的zlib是当前MinGW网站下载的话,也就是版本号为1.2.3,那么请升级到1.2.5,因为zlib-1.2.3带有bug,导致libxml2源码包不能编译通过。zlib的官方网站:
http://www.zlib.net/
为方便操作,需要修改C:/MinGW/msys/1.0/etc文件夹下的fstab,默认是只有/mingw一个mount point的,需要加上/libxml2和/zlib,如下图:
改好后,到上一层文件夹下双击msys.bat进入msys环境,这是一个模拟Linux的平台,可以在上面执行configure、make等命令编译Windows程序。
首先来编译zlib-1.2.5,进入/zlib,执行:
$ make -f win32/Makefile.gcc
编译成功后,需要拷贝需要的文件到MinGW相应目录:
$ cp -iv zlib1.dll /mingw/bin
$ cp -iv zconf.h zlib.h /mingw/include
$ cp -iv libz.a /mingw/lib
$ cp -iv libzdll.a /mingw/lib/libz.dll.a
然后就可以编译libxml2了,进入/libxml2,执行:
$ ./configure
然后就是make:
$ make
如果顺利的话,可以跳到本文的最后,但是通常都是不顺利的,第一个可能遇到的问题是_imp__xmlFree未定义,如下图:
这好像是一个多年未解决的bug,早在2004年就有人提出了,他的解决办法是修改xmlexports.h,链接如下:
http://mail.gnome.org/archives/xml/2004-February/msg00007.html
修改后的xmlexports.h部分如下:
解决这个问题之后,再次执行make编译,如果出现如下错误,gzdirect未定义,那就是没有升级zlib了。
如果人品不算太差,应该就不会有其它状况出现了。此时可以拷贝.libs/libxml2.a到MinGW的lib文件夹,拷贝include/libxml文件夹到MinGW的include文件夹,完成libxml2的源代码安装。
验证就比较简单了,可以选Code::Blocks --> Project properties --> Build targets --> Debug --> Duplicate,输入复制的构建目标名字,比如“gcc Debug”,然后选择OK。这样做为了尽可能地减少重复操作。
然后选Project build options --> gcc Debug --> Linker settings,去掉预编译库文件libxml2.lib,换上刚才新编译的libxml2.a,而且,链接的顺序也是很重要的,否则会出现连接错误。下面的是成功的链接顺序:
而下面的顺序是不行的:
最后,工具栏上的“Build target”选择gcc Debug,按编译按钮,再执行程序,返回正常结果:
libxml2在MinGW下编译需要用到msys,如果安装MinGW时选择默认选项,而不是全部安装的话,需要另外装上msys。本文编译的libxml2版本是2.7.7
此外,如果你的zlib是当前MinGW网站下载的话,也就是版本号为1.2.3,那么请升级到1.2.5,因为zlib-1.2.3带有bug,导致libxml2源码包不能编译通过。zlib的官方网站:
http://www.zlib.net/
为方便操作,需要修改C:/MinGW/msys/1.0/etc文件夹下的fstab,默认是只有/mingw一个mount point的,需要加上/libxml2和/zlib,如下图:
改好后,到上一层文件夹下双击msys.bat进入msys环境,这是一个模拟Linux的平台,可以在上面执行configure、make等命令编译Windows程序。
首先来编译zlib-1.2.5,进入/zlib,执行:
$ make -f win32/Makefile.gcc
编译成功后,需要拷贝需要的文件到MinGW相应目录:
$ cp -iv zlib1.dll /mingw/bin
$ cp -iv zconf.h zlib.h /mingw/include
$ cp -iv libz.a /mingw/lib
$ cp -iv libzdll.a /mingw/lib/libz.dll.a
然后就可以编译libxml2了,进入/libxml2,执行:
$ ./configure
然后就是make:
$ make
如果顺利的话,可以跳到本文的最后,但是通常都是不顺利的,第一个可能遇到的问题是_imp__xmlFree未定义,如下图:
这好像是一个多年未解决的bug,早在2004年就有人提出了,他的解决办法是修改xmlexports.h,链接如下:
http://mail.gnome.org/archives/xml/2004-February/msg00007.html
修改后的xmlexports.h部分如下:
/* Windows platform with GNU compiler (Mingw) * #if defined(_WIN32) && defined(__MINGW32__) #undef XMLPUBFUN #undef XMLPUBVAR #undef XMLCALL #undef XMLCDECL * * if defined(IN_LIBXML) this raises problems on mingw with msys * _imp__xmlFree listed as missing. Try to workaround the problem * by also making that declaration when compiling client code. * #if defined(IN_LIBXML) && !defined(LIBXML_STATIC) #define XMLPUBFUN __declspec(dllexport) #define XMLPUBVAR __declspec(dllexport) #else #define XMLPUBFUN #if !defined(LIBXML_STATIC) #define XMLPUBVAR __declspec(dllimport) extern #else #define XMLPUBVAR extern #endif #endif #define XMLCALL __cdecl #define XMLCDECL __cdecl #if !defined _REENTRANT #define _REENTRANT #endif #endif */ #if defined(_WIN32) && defined(__MINGW32__) #define XMLPUBFUN #ifdef __cplusplus #define XMLPUBVAR extern #else #define XMLPUBVAR #endif #if !defined _REENTRANT #define _REENTRANT #endif #endif
解决这个问题之后,再次执行make编译,如果出现如下错误,gzdirect未定义,那就是没有升级zlib了。
如果人品不算太差,应该就不会有其它状况出现了。此时可以拷贝.libs/libxml2.a到MinGW的lib文件夹,拷贝include/libxml文件夹到MinGW的include文件夹,完成libxml2的源代码安装。
验证就比较简单了,可以选Code::Blocks --> Project properties --> Build targets --> Debug --> Duplicate,输入复制的构建目标名字,比如“gcc Debug”,然后选择OK。这样做为了尽可能地减少重复操作。
然后选Project build options --> gcc Debug --> Linker settings,去掉预编译库文件libxml2.lib,换上刚才新编译的libxml2.a,而且,链接的顺序也是很重要的,否则会出现连接错误。下面的是成功的链接顺序:
而下面的顺序是不行的:
最后,工具栏上的“Build target”选择gcc Debug,按编译按钮,再执行程序,返回正常结果:
相关文章推荐
- Windows + MinGW环境下使用libxml2 (1) 安装已编译包
- GSL 安装使用方法 MinGW 、 VC、Borland C++ Builder、Windows开发环境下的使用
- GSL安装使用方法MinGW 、 VC、Borland C++ Builder、Windows开发环境下的使用
- 在Windows/Ubuntu下安装OpenGL环境(GLUT/freeglut)与跨平台编译(mingw/g++)
- 4000 python3.6 windows环境下paramiko模块的安装和使用
- Windows环境下Qwt安装和使用
- MongoDB —— Windows环境安装与简单使用
- 在Windows/Ubuntu下安装OpenGL环境(GLUT/freeglut)与跨平台编译(mingw/g++)
- windows环境使用composer安装YII2.0
- windows下,ruby环境的安装,与sass,compass的使用方法
- 在MinGW环境下安装和使用glut
- zookeeper安装和使用 windows环境+dubbo管理控制台的安装 【以及】 tomcat启动配置
- 在Windows环境下使用MinGW编译Qt 4.8.6
- 使用mingw在windows下搭建c/c++ IDE简单开发环境
- 在windows 环境下对于 git 服务器的安装和使用
- windows环境下的git安装及使用
- 在Windows下使用CMake+MinGW搭建C/C++编译环境
- 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信
- zookeeper的安装与使用(windows环境)
- Windows环境下Anaconda和selenium库安装使用