我需要为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 ../..
左侧下载的libxml2.dll正常工作。编译的libxml2.dll在右侧。我已经尝试使用zlib标志,我将我的zlib标头放在include目录和lib目录中的dll / lib中,但是我无法将它链接到DLL中。
答案 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