无法在Windows上使用zlib依赖编译?

时间:2009-12-17 03:56:32

标签: windows dll visual-c++ zlib

我正在尝试将使用zlib的程序移植到带有MSVC的Windows。不幸的是,经过几个小时的尝试后,我似乎无法获得任何引用zlib来运行的东西。

这是我用来测试zlib是否可以运行的虚拟程序:

#include <zlib.h>
#include <stdio.h>

int main(void)
{
    z_stream zst;
    zst.zalloc = Z_NULL;
    zst.zfree = Z_NULL;
    zst.opaque = Z_NULL;
    zst.next_out = Z_NULL;
    zst.next_in = Z_NULL;
    zst.avail_out = 0;

    inflateInit(&zst);

    puts("hello, world!");

    return 0;
}

通过将找到here的zlib DLL存档的内容复制到各自的GnuWin32目录中来安装zlib(因为找到的设置here似乎包含无效的标头),我尝试编译测试程序以下内容:

C:\Documents and Settings\Administrator\My Documents>cl test.c -I"C:\Program Files\GnuWin32\include" "C:\Program Files\GnuWin32\lib\zlib.lib"
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.0 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved

test.c
Microsoft (R) Incremental Linker Version 9.0030729.01
Copyright (C) Microsoft Corporation. All rights reserved.

/out:test.exe
test.obj
"C:\Program Files\GnuWin32\lib/zlib.lib"

然后,当我尝试运行test.exe时,出现错误对话框,说明:

  

此应用程序无法启动   因为找不到zlib1.dll。   重新安装应用程序可能会修复   这个问题。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

zlib1.dll需要位于可执行文件的路径或目录中。

答案 1 :(得分:0)

听起来你在GnuWin32目录中有zlib1.dll?获得zlib1.dll的最简单方法可能是将其复制到与test.exe相同的目录中。您还可以下载名为Dependecy Walker的免费工具,以便更好地了解无法找到zlib1.dll的原因。

答案 2 :(得分:0)

您应该在Win32目录中阅读ZLIB发行版附带的DLL_FAQ.txt文件。它解释了为什么他们使用ZLIB1.dll而不是ZLIB.dll,为什么要进行更改,差异是什么,并让您深入了解您可以做出的选择。

答案 3 :(得分:0)

您应该将这些文件(zconf.h和zlib.h)复制到qt安装文件夹中的MSVC / include /文件夹中

例如,此文件应存在: C:\ Qt \ Qt5.14.2 \ 5.14.2 \ msvc2017_64 \ include \ QtZlib \ zlib.h C:\ Qt \ Qt5.14.2 \ 5.14.2 \ msvc2017_64 \ include \ QtZlib \ zconf.h