【问题标题】:How do I link libxml2 with zlib1 on Windows?如何在 Windows 上将 libxml2 与 zlib1 链接?
【发布时间】:2016-11-26 05:03:00
【问题描述】:

我需要为我的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 目录中,把 dll/lib 放在 lib 目录中,但我无法让它链接到 DLL 中。

【问题讨论】:

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


    【解决方案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,但我会注意我明确指定 /MD 用于动态链接发布 msvcrt 和 debug=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 not interpeted as 1, but as 0. (!= @987654328 @)

    再次查看您的 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
    

    【讨论】:

    • 本周末想在这个周末工作,但我却被一个损坏的 Git 存储库包裹住了。希望我能在本周晚些时候回到这个话题。查看我在 Wunderlist 中的待办事项,并意识到自 4 月以来我一直在致力于构建插件的依赖项:\
    猜你喜欢
    • 2021-12-03
    • 2021-09-16
    • 2020-07-13
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多