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

标签 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 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 no 以及将 MSVC_VERSION=vc100 传递给 make 步骤。

I also note you pass zlib=truewhen 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/

相关文章:

visual-studio - VS2010 锁定我的键盘(或至少部分键盘)

c++ - zlib 和 minizip 有什么关系?

iphone - iPhone中的ZLib无法解压数据

c - 如何在C中将字符串初始化为链表结构

c - 更新结构列表中的单元格并返回列表

.net - DataGridView 排序不起作用

c++ - 在 Windows 中获取安装前缀的最佳方法是什么

zlib - Rust 有可用的 gzip 库吗?

创建一个初始化结构并返回指针的 C 函数

clang 没有停留在#include "/dev/whatever"