libxml2 + iconv + msvc 在windows下生成使用库

为了跨平台的解析xml,偶然获得Linux下比较好用的一个xml的解析库libxml2,使用起来确实比较简单,方便;但移植到windows下后发下使用上存在问题:
无法解析格式位GB2312类型的XML文件,但由于一些外部因素,Windows下必须使用GB2312格式
在网上查看了诸多教程,有很多编译生成libxml2库的文章,但都不支持iconv,仔细阅读README后,终于生成了可用的libxml2.lib库,记录下来备用

操作系统:windows 7 x64
版本:libiconv-1.15, libxml2 Github版本
Visual Studio版本:vs2015
Cygwin:x64

以下操作皆为生成x64位库,32位的基本类似,可以查看具体的README。

一、生成iconv.lib

下载 libiconv-1.xx.tar.gz 在1.15中,需要阅读README.windows,在1.16中需要阅读INSTALL.windows,其余版本的类似,找到windows版本的安装说明。
三种方式可以编译安装libiconv库,我这里使用的是第二种,使用MSVC安装,这个是VS种安装的C/C++工具链,一般都已经安装。

There are three ways to create binaries of this package for Microsoft Windows:

  1. Native binaries, built using the mingw tool chain. 2) Native
  2. binaries, built using the MS Visual C/C++ tool chain. 3) Binaries for
  3. the Cygwin environment.

根据说明:

This recipe requires also a Cygwin environment (with 'bash', the common POSIXcommands, and 'make') as a build environment. Building with 'nmake' is notsupported.For this, you need to install* Cygwin (from https://cygwin.com/),* some packages available from the Cygwin package installer:makeYou also need the scripts 'ar-lib' and 'compile' fromhttps://git.savannah.gnu.org/gitweb/?p=automake.git;a=blob_plain;f=lib/ar-lib;hb=HEADhttps://git.savannah.gnu.org/gitweb/?p=automake.git;a=blob_plain;f=lib/compile;hb=HEADrespectively.They may also be included in this package, in directory 'build-aux/'.Save them; the instructions below assume that you stored them in $HOME/msvc/.Make them executable:chmod a+x ar-lib compile

这里需要安装Cygwin 安装Cygwin时需要选择make安装包,同时需要下载ar-libcompile,并且将这两个安装包放到$HOME/msvc/路径下,如果没有msvc路径,需要创建,还需要改变相应的权限chmod a+x ar-lib compile
操作完成后,打开Cygwinbash界面,根据需要,选择x64或者x86版本的需求进行操作,也可以将所有的命令写成一个shell脚本: x64.sh,一次性执行,这里以x64为例,必须要注意的时,在编写脚本的时候,一定要使用的时unix/linux风格的文件类型,windows和linux的换行符不同,在Cygwin中执行会出问题:

#x64 版本:filename: x64.sh
# Windows C library headers and libraries.
WindowsCrtIncludeDir='C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt'
WindowsCrtLibDir='C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\'
INCLUDE="${WindowsCrtIncludeDir};$INCLUDE"
LIB="${WindowsCrtLibDir}x64;$LIB"# Windows API headers and libraries.
WindowsSdkIncludeDir='C:\Program Files (x86)\Windows Kits\8.1\Include\'
WindowsSdkLibDir='C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\'
INCLUDE="${WindowsSdkIncludeDir}um;${WindowsSdkIncludeDir}shared;$INCLUDE"
LIB="${WindowsSdkLibDir}x64;$LIB"# Visual C++ tools, headers and libraries.
VSINSTALLDIR='C:\Program Files (x86)\Microsoft Visual Studio 14.0'
VCINSTALLDIR="${VSINSTALLDIR}"'\VC'
PATH=`cygpath -u "${VCINSTALLDIR}"`/bin/amd64:"$PATH"
INCLUDE="${VCINSTALLDIR}"'\include;'"${INCLUDE}"
LIB="${VCINSTALLDIR}"'\lib\amd64;'"${LIB}"export INCLUDE LIB
PATH=/usr/local/msvc64/bin:$PATH
export PATH#win32_target=_WIN32_WINNT_WINXP   # for MSVC 9.0
#win32_target=_WIN32_WINNT_VISTA   # possibly for MSVC >= 10.0
win32_target=_WIN32_WINNT_WIN7    # possibly for MSVC >= 10.0
#win32_target=_WIN32_WINNT_WIN8    # possibly for MSVC >= 10.0./configure --host=x86_64-w64-mingw32 --prefix=/usr/local/msvc64 \CC="$HOME/msvc/compile cl -nologo" \CFLAGS="-MD" \CXX="$HOME/msvc/compile cl -nologo" \CXXFLAGS="-MD" \CPPFLAGS="-D_WIN32_WINNT=$win32_target -I/usr/local/msvc64/include" \LDFLAGS="-L/usr/local/msvc64/lib" \LD="link" \NM="dumpbin -symbols" \STRIP=":" \AR="$HOME/msvc/ar-lib lib" \RANLIB=":"
make
make check
make install

Cygwin的命令行中执行命令:

./x64.sh

编译执行的时间会比较久,执行完成后,在/usr/local/msvc64/路径下的include文件夹中会生成iconv.h头文件,在lib文件夹中会生成iconv.dll.lib库文件,需要将其重命名未iconv.lib以供使用,至此iconv静态库生成完毕,此外,在libiconv-1.xx/lib/.libs/路径下会生成iconv-2.dll文件,此文件也需保留。

二、 生成libxml2

首先在Github中下载了源文件后,解压,进入路径libxml2-master/win32中,查看README文件,文件中比较详细的说明了如何进行操作,可以将所有的操作步骤写成一个批处理命令的脚本,即:.bat.cmd文件: x64_debug_iconv_yes.bat

:: filename : x64_debug_iconv_yes.bat
:: 配置运行的环境, x64
call "c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat":: 先清除之前安装的所有配置,如果第一次,可以不执行
"c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\nmake.exe" clean:: 配置信息
cscript configure.js compiler=msvc iconv=yes ^prefix=c:\libxml2\x64\debug ^bindir=c:\libxml2\x64\debug\bin ^incdir=c:\libxml2\x64\debug\include ^libdir=c:\libxml2\x64\debug\lib ^sodir=c:\libxml2\x64\debug\dll ^include=c:\cygwin64\usr\local\msvc64\include ^lib=c:\cygwin64\usr\local\msvc64\lib ^debug=yes:: 编译
"c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\nmake.exe" /f Makefile.msvc > debug_x64.log:: 安装
"c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\nmake.exe" /f Makefile.msvc install >> debug_x64.logpause

关于cscript configure.js的说明:

  1. 可以使用cscript configure.js help查看具体的帮助说明
  2. prefix 表示需要将安装的文件存放的位置
  3. bindir 表示安装的可执行exe存放位置,默认放在$prefix\bin
  4. incdir 表示安装的头文件存放的位置,默认放在$prefix\include
  5. libdir 表示生成的静态库存放的位置,默认放在$prefix\lib
  6. sodir 表示生成的动态库存放的位置,默认放在$prefix\bin
  7. include 表示生成libxml2库需要依赖的库的头文件存放的位置,特指iconv头文件的路径
  8. lib 表示生成libxml2库需要依赖的库存放的位置,特指iconv.lib的路径

cmd中执行:

x64_debug_iconv_yes.bat

如果输出没有错误,则执行成功,生成libxml2.dll libxml2.lib库,如果出错,可以查看debug_x64.log日志文档。

三、 libxml2 库使用问题

  1. 当XML文件是GB2312格式时,运行时需要额外添加动态库iconv-2.dll

四、 参考文章

  1. win10 vs2015 libxml2编译 各种版本

libxml2 iconv 在windows下的生成指南相关推荐

  1. ReactNative windows下打包生成安卓apk

    create-react-native-app 运行npm run eject后根目录会产生一个andriod目录和ios目录.里面就是运行打包的配置文件. 如果你是用react-native-cli ...

  2. windows下批量生成文件夹

    在windows环境下如果想要批量生成文件夹: 1.创建一个记事本文件 2.首行大写MD 3.后面加上你想创建的文件夹的名字,每个名字之间有空格 4.退出记事本并保存 5.将记事本文件后缀改为bat文 ...

  3. Windows下文本生成图像AI画图尝鲜体验

    工具库 transformers 的开源方 Hugging Face 发布了一个专注于 diffuser 模型的开源库,我们可以基于它,仅仅通过几行代码就开始生成自己的艺术作画.不过这个 diffus ...

  4. Windows下如何生成数字证书

    1.Makecert.exe<证书创建工具>使用说明:http://msdn.microsoft.com/zh-cn/library/bfsktky3.aspx 2.SignTool.ex ...

  5. Windows下Qt生成可执行文件.exe

    正常编译后的.exe文件是运行不了的. 步骤: 1.先用release模式编译文件. 2.将release文件夹下的.exe文件留下,其他文件全部删掉.(也可以新建一个文件夹,只把.exe文件放进去) ...

  6. Windows下LM-Hash与NTLM-Hash生成原理

    LM-Hash与NTLM-Hash 在windows下通过SAMInside提取到的密码Hash时,可以看到有两条,分别是LM-Hash和NT-Hash,这是对同一个密码的两种不同的加密方式,下面对其 ...

  7. 在Windows下使用CMake+MinGW搭建C/C++编译环境

    转载自:https://blog.csdn.net/isscollege/article/details/78038921?locationNum=8&fps=1 1 工具介绍 作为一款执行效 ...

  8. Windows 下 Let's Encrypt申请证书及使用

    为什么80%的码农都做不了架构师?>>>    https://www.cnblogs.com/asminfo/p/6801558.html Let's Encrypt是一个免费的. ...

  9. windows下安装libxml2

    windows下安装libxml2 (一)首先必须安装libiconv (1)下载路径http://gnuwin32.sourceforge.net/packages/libiconv.htm,选择& ...

最新文章

  1. python处理图片文件_python 学习(二)处理图片、TXT文档
  2. mysql创建表选择字段的时候下尽量小
  3. java dispatchevent_dispatchEvent(AWTEvent) 分派事件
  4. 机器学习:使用numpy实现数据增强(Data Augmentation)
  5. 算法训练 字符删除 c语言
  6. 获取Spring中的bean,使得线程安全性得到保障
  7. Excel实用函数大全(名称、功能、说明、用法、举例)
  8. linux基础--grep以及模式正则表达式
  9. javascript跨域、iframe跨域访问
  10. Xcode 11.7(12.4)/13.2的signing和sandbox配置截图对比
  11. python邮箱密码_python 模拟登陆163邮箱
  12. 太一星晨:负载均衡啃不动的骨头交给应用交付
  13. WMS库存盘点流程 WMS库存盘点计划
  14. servlet3 文件上传
  15. 快解析助力餐饮业实时访问后台管理系统
  16. 首席新媒体运营黎想教程:可复用的社群运营+直播流程
  17. python儿童宣传-为什么让孩子学Python会这么火?
  18. 一键清理系统垃圾文件脚本: clean.bat
  19. 计算机学科论文期刊,计算机学科期刊文章参考文献 计算机学科论文参考文献数量是多少...
  20. 软驱光碟安装linux系统,无光驱和软驱安装debian的方法

热门文章

  1. 电机专用SVPWM算法实现
  2. 在数据库如何对表进行查询
  3. 自动化报表系统,帮你轻松搞定日报、周报、月报!
  4. 关于解决jar双击无反应问题
  5. 查看网站黑链的几种方法
  6. Linus 命名 [冰封荒原] 版 Linux 内核的思考
  7. 基于wifi控制的51单片机温度报警器
  8. 29省市倡导「就地过年」,3000万+人异地过年!创历史新高!
  9. oracle数据库拼接sql语句字符串问题
  10. ubuntu20安装其他版本的make工具