我需要为我的 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 header 放在 include 目录中,将 dll/lib 放在 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
,但我会注意到我为动态链接版本 msvcrt 和 debug= 明确指定了
以及将 /MD
noMSVC_VERSION=vc100
传递给 make 步骤。
I also note you pass zlib=true
when the options seem to take yes|no
- and I do think 'true' will没有插入为 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
关于c - 如何在 Windows 上将 libxml2 与 zlib1 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40568174/