要在Windows上成功的安装xml2库,首先需要安装其依赖库iconv。
一、运用vs2017来构建,iconv库。
1、首先从https://www.gnu.org/software/libiconv/#downloading上下载最新的iconv源码(我下载的是libiconv-1.16版本),并解压到本地目录;
2、解压后,用vs2017构建一个空白项目libiconv;
3、把libiconv-1.16\lib中的relocatable.h、relocatable.c、iconv.c复制到libiconv\libiconv中;
4、把libiconv-1.16\libcharset\lib中的localcharset.c复制到libiconv\libiconv中;
5、把libiconv-1.16\libcharset\include中的localcharset.h.build.in复制到libiconv\libiconv中,并重命名为localcharset.h;
6、在libiconv\libiconv下建立文件夹include;
7、复制libiconv-1.16\include\iconv.h.build.in到libiconv\include,将其重命名为iconv.h;
8、复制libiconv-1.16\config.h.in到libiconv\include,将其重命名为config.h;
9、复制libiconv-1.16\lib中的所有头文件(*.h)和定义文件(*.def)到libiconv\include,注意不要覆盖7和8的两个文件;
10、把libiconv\include中的所有源文件和头文件添加到工程中去;
11、进入工程属性-->VC++目录,把libiconv\libiconv下的include目录添加到包含目录中;
12、修改iconv.c文件中的ICONV_CONST为const;
13、修改localcharset.h:
//#if @HAVE_VISIBILITY@ && BUILDING_LIBCHARSET
//#define LIBCHARSET_DLL_EXPORTED __attribute__((__visibility__("default")))
//#elif defined _MSC_VER && BUILDING_LIBCHARSET
//#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport)
//#else
//#define LIBCHARSET_DLL_EXPORTED
//#endif
#ifdef BUILDING_LIBCHARSET
#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport)
#elif USING_STATIC_LIBICONV
#define LIBCHARSET_DLL_EXPORTED
#else
#define LIBCHARSET_DLL_EXPORTED __declspec(dllimport)
#endif
14、注释掉config.h中的代码:
/* Define as good substitute value for EILSEQ. */
//#undef EILSEQ
15、修改iconv.h中的代码 :
//#if @HAVE_VISIBILITY@ && BUILDING_LIBICONV
//#define LIBICONV_DLL_EXPORTED __attribute__((__visibility__("default")))
//#elif defined _MSC_VER && BUILDING_LIBICONV
//#define LIBICONV_DLL_EXPORTED __declspec(dllexport)
//#else
//#define LIBICONV_DLL_EXPORTED
//#endif
//extern LIBICONV_DLL_EXPORTED @DLL_VARIABLE@ int _libiconv_version; /* Likewise */
#if BUILDING_LIBICONV
#define LIBICONV_DLL_EXPORTED __declspec(dllexport)
#elif USING_STATIC_LIBICONV
#define LIBICONV_DLL_EXPORTED
#else
#define LIBICONV_DLL_EXPORTED __declspec(dllimport)
#endif
extern LIBICONV_DLL_EXPORTED int _libiconv_version;
//#if @USE_MBSTATE_T@
//#if @BROKEN_WCHAR_H@
#if USE_MBSTATE_T
#if BROKEN_WCHAR_H
//#if @USE_MBSTATE_T@
#if USE_MBSTATE_T
//#if @HAVE_WCHAR_T@
#if HAVE_WCHAR_T
//extern LIBICONV_DLL_EXPORTED size_t iconv (iconv_t cd, @ICONV_CONST@ char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);
extern LIBICONV_DLL_EXPORTED size_t iconv(iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);
15、构建工程,即可得到libiconv.dll、libiconv.lib等,把这两个文件拷贝系统相应的目录中。
16、以上步骤虽然可以得到虽然可以成功得到libiconv库,但在编译xml2库时会提示IconvOpen、Iconv、IconvClose以及__imp_locale_charset等4个链接错误。这是由于1.16版本中,这几个函数的函数名变为了:iconv_open、iconv、iconv_close,所以可以通过改iconv的源文件或改xml2的源文件来消除这几个链接错误,我采取的是修改iconv的源文件。
17、修改iconv.h:
extern LIBICONV_DLL_EXPORTED iconv_t IconvOpen (const char* tocode, const char* fromcode);
18、修改iconv.c:
int IconvClose (iconv_t icd)
iconv_t IconvOpen (const char* tocode, const char* fromcode)
size_t Iconv (iconv_t icd,
19、修改localcharset.h:
//extern LIBCHARSET_DLL_EXPORTED const char * locale_charset (void);
20、此时再编译,生成的iconv库可以直接用于xml2库的编译安装。
二、xml2库的安装:
1、首先从ftp://xmlsoft.org/libxml2/上下载最新版本的xml2源码(我下载的是libxml2-2.9.10),并解压到当地文件夹;
2、以管理员身份运行VS2017的x64版的命令提示工具;
3、cd到libxml2-2.9.10\win32目录;
4、执行cscript config.js compiler=msvc prefix=C:\xml2;(安装目录中间不能有空格,暂时放到c的要目录,装完后可以拷贝到你想要放的地方)
5、执行nmake /f Makefile.msvc
6、执行nmake install。
安装完成!!!