我正在尝试将使用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。 重新安装应用程序可能会修复 这个问题。
非常感谢任何帮助。
答案 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