如何在Windows上将libxml2与zlib1链接?

我需要为我的TeamSpeak 3插件编译libxml2 32位和64位二进制文​​件,因为我找不到dll / lib 64位下载。 当我使用我编译的libxml2.dll作为命令提示符应用程序中的依赖项时,它工作得很好。 但是,当我尝试将其用作TeamSpeak 3中的依赖项时,程序会在启动时立即崩溃。 特别是它在这一行崩溃:

https://github.com/NobleUplift/TeamSpeak3WebsitePreview/blob/master/ts3websitepreview/plugin.c#L148

这是我在Windows上编译libxml2的批处理脚本:

@ECHO OFF CALL "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat" CD libxml2-2.9.4\win32 nmake clean cscript configure.js compiler=msvc zlib=true prefix=D:\Repos\libxml2\release include=D:\Repos\libxml2\dll\include lib=D:\Repos\libxml2\dll\bin debug=yes nmake nmake install cd ../.. 

工作的libxml2.dll在左边,破解的libxml2在右边

左侧下载的libxml2.dll可以正常工作。 编译的libxml2.dll在右侧。 我已经尝试使用zlib标志,我将我的zlib标头放在include目录和lib目录中的dll / lib中,但我无法将其链接到DLL中。

好吧,我不知道你的错了,但这是我们如何编译发布版本:

 set TARGET_DIR=.\release_vc100 cscript configure.js compiler=msvc cruntime=/MD debug=no iconv=no legacy=no vcmanifest=no prefix=%TARGET_DIR% || exit /B 1 nmake /f Makefile.msvc clean || exit /B 1 nmake /f Makefile.msvc MSVC_VERSION=vc100 || exit /B 1 nmake /f Makefile.msvc install || exit /B 1 

我猜你不想iconv=no ,但我会注意到我明确指定/MD用于动态链接释放msvcrt和debug=no以及将MSVC_VERSION=vc100传递给make步骤。

我还注意到,当选项似乎采用yes|no时,传递zlib=true – 我认为’true’不会作为1进行处理,而是作为0.(!= yes

再次查看你的depwalker输出,我不知何故怀疑你丢失的MSVC_VERSION开关可能是一个问题,因为depwalker列出了一个丢失的LIBiconv.dll并且该命名方案(动态对象的LIB前缀)是* nix的东西,据我所知。)

至于你的错误行 – DLL加载失败 – 两个depwalker截图显示缺少依赖DLL文件:

  • 左侧:iconv.dll zlib1.dll很糟糕

  • 右侧:缺少LIBiconv.dll。 (但我认为 Windows上没有libiconv.dll,所以必须有一些错误的链接器设置(??)。


我也明确地传递了makefile,但这可能只是我们尝试一些自定义makefile的先前版本的遗留物。

附注:调试版本为:

 cscript configure.js compiler=msvc cruntime=/MDd debug=yes iconv=no legacy=no vcmanifest=no prefix=%TARGET_DIR% || exit /B 1