如何在 DevC++ 中访问 Zlib.h?

Posted

技术标签:

【中文标题】如何在 DevC++ 中访问 Zlib.h?【英文标题】:How to access Zlib.h in DevC++? 【发布时间】:2021-06-09 16:00:34 【问题描述】:

我的老师要求运行以下代码

#include <stdio.h>
#include <string.h> // for strlen #include <assert.h>
#include "zlib.h"
int main(int argc, char* argv[])


    // original string len = 36
    char a[50] = "Hello Hello Hello Hello Hello Hello!";
    // placeholder for the compressed (deflated) version of "a"
    char b[50];
    // placeholder for the UNcompressed (inflated) version of "b"
    char c[50];
    printf("Uncompressed size is: %lu\n", strlen(a));
    printf("Uncompressed string is: %s\n", a);
    printf("\n  \n\n");
    // STEP 1.

    // deflate a into b. (that is, compress a into b)
    // zlib struct z_stream defstream;
    defstream.zalloc = Z_NULL;
    defstream.zfree = Z_NULL;
    defstream.opaque = Z_NULL;

    // setup "a" as the input and "b" as the compressed output

    defstream.avail_in = (uInt)strlen(a) + 1; // size of input, string + terminator
    defstream.next_in = (Bytef*)a; // input char array
    defstream.avail_out = (uInt)sizeof(b); // size of output
    defstream.next_out = (Bytef*)b; // output char array

    // the actual compression work.

    deflateInit(&defstream, Z_BEST_COMPRESSION);
    deflate(&defstream, Z_FINISH);
    deflateEnd(&defstream);
    // This is one way of getting the size of the output

    printf("Compressed size is: %lu\n", strlen(b));
    printf("Compressed string is: %s\n", b);

    printf("\n  \n\n");

    // STEP 2.

    // inflate b into c

    // zlib struct z_stream infstream;
    infstream.zalloc = Z_NULL;
    infstream.zfree = Z_NULL;
    infstream.opaque = Z_NULL;

    // setup "b" as the input and "c" as the compressed output

    infstream.avail_in = (uInt)((char*)defstream.next_out - b); // size of input

    infstream.next_in = (Bytef*)b; // input char array

    infstream.avail_out = (uInt)sizeof(c); // size of output

    infstream.next_out = (Bytef*)c; // output char array

    // the actual DE-compression work. inflateInit(&infstream);
    inflate(&infstream, Z_NO_FLUSH);
    inflateEnd(&infstream);
    printf("Uncompressed size is: %lu\n", strlen(c));
    printf("Uncompressed string is: %s\n", c);
    // make sure uncompressed is exactly equal to original. assert(strcmp(a,c)==0);
    return 0;

我正在使用 Dev C++ 编译器,我是使用外部头文件的初学者。 如何在 devc++ 中添加 zlib?或者请提出其他执行程序的方法。

注意:我使用的是 Windows 操作系统

【问题讨论】:

第一步应该是卸载Dev-C++。它陈旧、过时且无人维护。并带有一个相当旧的编译器。还有其他更现代的环境可用,它们将更适合了解实际工作场所使用的内容,并且还可以免费下载和使用。 安装visual studio community然后你可以使用vcpkg、conan或者其他包管理器来安装zlib Dev C++ 实际上不是编译器。这是一个较旧的 IDE,主要在十多年前使用。如果您安装了 Dev C++,它可能还会在安装过程中安装旧版本的 TDM-GCC。解决 zlib 问题的第一步是为捆绑的编译器获取兼容的二进制文件。完成后,您可能需要在文件系统的某个位置提取二进制文件,然后通过在链接器设置中设置包含目录设置以及库的位置和名称来告诉 Dev C++ 标头的位置。 也可以从源代码下载和编译zlib(来自其网站:zlib.net);这样做的好处是您可以保证生成的目标文件将与您的编译器兼容,因为您使用编译器编译它们:) 【参考方案1】:

如果文件没有安装,请先从这里下载:https://zlib.net/

一旦你安装它并且它在你的包含路径上,你就可以包含它:

#include <zlib.h>

或者,您可以将它移动到与您的 main.c 文件相同的目录,然后您的代码应该可以编译。确保将所有必需的文件移动到该目录,通常 .h 文件仅包含声明,因此您也需要一个 .c 文件。

如果您这样做,则无需添加任何其他文件。 我不建议使用 DevC++,它是一个旧的、废弃的 IDE,它使用非标准编译器,如果你想使用 IDE,我推荐 CodeBlocks,一个免费且开放的多平台 IDE。

【讨论】:

以上是关于如何在 DevC++ 中访问 Zlib.h?的主要内容,如果未能解决你的问题,请参考以下文章

devc++ 如何看输出结果

DEVC++如何调试代码

DEVC++自定义背景色及代码颜色后如何恢复

使用 devc++ 和 c++ 语言复制文件和目录

致命错误:zlib.h:安装 zlib 时没有这样的文件或目录

DEVC++如何使用命令行,为命令行参数赋值?