windows 下编译libxml2 libxslt

编译 iconv 库

libiconv是将一种编码格式转换为另一种编码格式的跨平台开源库,http://www.gnu.org/software/libiconv/可以查看支持转换的编码类型。但是libiconv 的开发者并没有发布windows下的源码和库,要想在windows下使用libiconv 库,必须自己手动把libiconv 移植到windows平台,具体步骤如下:

可以直接下载我创建的工程: iconv 工程下载

1、去http://ftp.gnu.org/pub/gnu/libiconv/下载源码包,本文使用的是libiconv-1.16.tar.gz

2、新建libiconv 动态库工程

windows 下编译libxml2 libxslt_第1张图片

3、拷贝文件

(1)将 “ libiconv-1.16\lib“ 目录下的 “relocatable.h”, “relocatable.c” and “iconv.c” 三个文件拷贝到工程目录下

(2)将 “libiconv-1.16\libcharset\lib\localcharset.c” 文件拷贝到工程目录下

(3) 将 “libiconv-1.16\libcharset\include\localcharset.h.build.in" 文件拷贝到工程目录下,并修改文件名称为 localcharset.h

(4)将 “\libiconv-1.16\windows\libiconv.rc” 拷贝到工程目录下

(5) 在工程目录下创建 include 目录,

(6) 将 “\libiconv-1.16\include\iconv.h.build.in ” 拷贝到 include 目录下,并重命名为 iconv.h

(7) 将 “\libiconv-1.16\config.h.in” 拷贝到 include 目录下,并重命名为 config.h

(8)将 “\libiconv-1.16\lib” 目录下所有的 .h 和 .def 文件拷贝到 include目录下

 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200514150446382.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pob3VndWFuZ2NhaTg=,size_16,color_FFFFFF,t_70#pic_center)

4、工程中添加现有项,将 iconv.c ,localcharset.c、localcharset.h、relocatable.c、relocatable.h、libiconv.rc 添加到工程中.

windows 下编译libxml2 libxslt_第2张图片

5、修改工程配置。如下图

1)配置头文件包含目录windows 下编译libxml2 libxslt_第3张图片

在构建动态链接库libiconv.dll时,最好将运行时库设置为“多线程”。因为libiconv.dll不需要VC运行库,只有使用libiconv.dll的应用程序可能需要也可能不需要VC运行库,所以对VC运行库的依赖可以由将要构建并动态链接到libiconv.dll的应用程序来控制
windows 下编译libxml2 libxslt_第4张图片

由于工程中含有 .c 文件,所以这里我设置不使用预编译头
windows 下编译libxml2 libxslt_第5张图片
6、修改文件中的BUG
(1) localcharset.h : 第21-27行
代码

#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 LIBICONV_EXPORTS
#define LIBCHARSET_DLL_EXPORTED __declspec(dllexport)
#elif USING_STATIC_LIBICONV
#define LIBCHARSET_DLL_EXPORTED
#else
#define LIBCHARSET_DLL_EXPORTED __declspec(dllimport)
#endif

(2) iconv.h 第 25 - 32 行

源代码:

#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 */

修改为:

#ifdef LIBICONV_EXPORTS
#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; /* Likewise */

第 91 行:
源代码:

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, char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);

第 109、110 行:
源代码:

#if @USE_MBSTATE_T@
#if @BROKEN_WCHAR_H@

修改为:

#if USE_MBSTATE_T
#if BROKEN_WCHAR_H

第 130 行:
源代码:

#if @USE_MBSTATE_T@

修改为:

#if USE_MBSTATE_T

第170行:
源代码:

#if @HAVE_WCHAR_T@

修改为:

#if HAVE_WCHAR_T

(3) iconv.c 第 250 行
源代码:

size_t iconv (iconv_t icd,
              ICONV_CONST char* * inbuf, size_t *inbytesleft,
              char* * outbuf, size_t *outbytesleft)

修改为:

size_t iconv (iconv_t icd,
              const char* * inbuf, size_t *inbytesleft,
              char* * outbuf, size_t *outbytesleft)

(4)config.h 第 30 行
删除代码:

#undef EILSEQ

(5)libconv.rc:

在第4行增加代码:

#define PACKAGE_VERSION_MAJOR       1
#define PACKAGE_VERSION_MINOR       14
#define PACKAGE_VERSION_SUBMINOR    0
#define PACKAGE_VERSION_STRING      "1.14"

7、编译时需要将所有得 C 文件单独编译一下,然后再编译整个工程

编译libxml2-2.9.10(32位)

1、 iconv库准备
在d盘建立目录:,opt下面新建目录include、lib\debug、lib\release,把iconv的库分别拷贝到(名称修改为 iconv.lib、iconv.dll)lib\debug 和 lib\release 目录下,把头文件放到include下
2、下载 libxml2-2.9.10 源码,下载地址:
https://gitlab.gnome.org/GNOME/libxml2/#
下载完成之后,解压至相应的工作目录

3、 打开Visual Studio 2010 命令提示(“Visual Studio Command Prompt 2010”),进到相应目录下

cd E:\Work\libxml2-2.9.10\win32

3、 环境配置
Debug 和 Release 的配置二选一
Debug 版本

cscript configure.js compiler=msvc prefix=d:\opt\debug include=d:\opt\include lib=d:\opt\lib\debug debug=yes

Release 版本

cscript configure.js compiler=msvc prefix=d:\opt\release include=d:\opt\include lib=d:\opt\lib\realse debug=no

4、编译(生成库文件)

nmake /f Makefile.msvc

5、安装(拷贝库文件到opt目录下)

nmake /f Makefile.msvc install

编译libxml2-2.9.3(64位)
1、 iconv库(64位)准备
在d盘建立目录:opt64,opt64下面新建目录include、lib,把iconv的库放到lib下,把头文件放到include下
2、 打开Visual Studio x64 Win64 Command Prompt 2010命令提示,进到相应目录下

cd E:\Work\libxml2-2.9.10\win32

后续操作和 32 位版本相同

三、编译 libxslt (32位)
1、 libxml2、iconv库准备
把 libxml2\debug\lib 目录下所有文件拷贝至 libxml2\lib\debug 目录下
把 libxml2\release\lib 目录下所有文件拷贝至 libxml2\lib\release 目录下
把 libxml2\debug\include\libxml2 目录下的 libxml 目录拷贝到 libxml2\include 目录下

2、下载 libxlst 源码,下载地址:
hhttps://gitlab.gnome.org/GNOME/libxslt
下载完成之后,解压至相应的工作目录

23、 打开Visual Studio 2010 命令提示(“Visual Studio Command Prompt 2010”),进到相应目录下

cd E:\Work\libxslt-master\win32

3、 环境配置
Debug 和 Release 的配置二选一
Debug 版本

cscript configure.js compiler=msvc prefix=d:\opt\debug include=d:\opt\include lib=d:\opt\lib\debug debug=yes

Release 版本

cscript configure.js compiler=msvc prefix=d:\opt\release include=d:\opt\include lib=d:\opt\lib\realse debug=no

4、编译(生成库文件)

nmake /f Makefile.msvc

5、安装(拷贝库文件到opt目录下)

nmake /f Makefile.msvc install

四、编译libxslt-1.1.29(64位)
同 libxml2 的步骤相同

五、如何给编译的libxml2、libxslt库自己指定命名?
1、 libxml2
①libxml2-2.9.3\win32目录下,使用Notepad打开文件Makefile.msvc,修改XML_NAME的值,默认值为xml2
如:XML_NAME = xml2-2.9.3
②libxml2-2.9.3\win32目录下,将文件libxml2.def.src重命名为libxml2-2.9.3.def.src
③重新编译、安装即可
2、 libxslt
①libxslt-1.1.29\win32目录下,使用Notepad打开文件Makefile.msvc,修改XSLT_NAME和EXSLT_NAME的值,XSLT_NAME默认值为xslt,EXSLT_NAME默认值为exslt
如:XSLT_NAME = xslt-1.1.29
EXSLT_NAME = exslt-1.1.29
②如果要修改libxslt依赖的libxml2库的名字,则在Makefile.msvc全文搜索libxml2*.lib,修改为指定相应libxml2库的名字即可。
③libxslt-1.1.29\win32目录下,
将文件libxslt.def.src重命名为libxslt-1.1.29.def.src
将文件libexslt.def.src重命名为libexslt-1.1.29.def.src
④重新编译、安装即可

你可能感兴趣的:(windows)