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

时间:2016-11-12 22:05:27

标签: c visual-studio-2010 zlib libxml2 teamspeak

我需要为TeamSpeak 3 plugin编译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 ../..

working libxml2.dll is on the left, broken libxml2 is on the right

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

1 个答案:

答案 0 :(得分:1)

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

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,但我会注意到我为动态链接版本msvcrt和/MD明确指定debug=no以及传递MSVC_VERSION=vc100到制作步骤。

我还注意到,当选项似乎需要zlib=true时,我会通过yes|no - 我认为'true'不会作为1而是作为0进行处理,而是作为0。( != yes

再次查看你的depwalker输出,我怀疑你错过了MSVC_VERSION切换可能确实是一个问题,因为depwalker列出了一个缺少的LIBiconv.dll和那个命名方案(LIB)据我所知,动态对象的前缀是一个* nix的东西。)

至于你的erro行--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