1

我正在尝试通过 MSVC 将使用 zlib 的程序移植到 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;
}

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

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

4 回答 4

0

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

于 2009-12-17T04:01:37.810 回答
0

听起来你zlib1.dll在 GnuWin32 目录下?获得zlib1.dll认可的最简单方法可能是将其复制到与test.exe. 您还可以下载一个名为Dependecy Walker的免费工具,以更好地了解为什么zlib1.dll找不到。

于 2009-12-17T04:01:55.330 回答
0

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

于 2009-12-17T04:09:19.717 回答
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

于 2020-08-01T11:25:02.297 回答