在windows mingw下使用zlib

myf*_*wik 10 c windows mingw zlib

我似乎无法让zlib对windows下的mingw做任何事情.

我下载了zlib @ http://sourceforge.net/projects/mingw/files_beta/MinGW/zlib/zlib-1.2.3-1-mingw32/,并将头文件和lib文件放在正确的位置.

简单的代码如:

#include <stdlib.h>
#include <stdio.h>

#include "zlib.h"

int main(int argc, char *argv[])
{
    long a;
    char buffer[1024];
    a = 1024;
    compress(buffer,&a,"testing",7);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译:

gcc test.c -lzlib -Wall -o test.exe
Run Code Online (Sandbox Code Playgroud)

编译好.然而,exe在压缩功能崩溃.有任何想法吗?

Dav*_*son 6

我建议对此类事情使用MSYS2。这些说明假定您要编译64位程序,但是可以很容易地将它们修改为32位。

安装MSYS2后,在“开始”菜单中运行“ MinGW-w64 Win64 Shell”快捷方式。通过运行以下命令来安装64位工具链:

pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-zlib
Run Code Online (Sandbox Code Playgroud)

然后通过运行如下代码来编译代码:

gcc test.c -lz -o test
Run Code Online (Sandbox Code Playgroud)

我没有仔细检查您的代码,但是我能够运行您的代码而不会崩溃,因此您的代码可能还可以。您的代码也没有输出,因此很难判断它是否真正起作用。


小智 0

查看 zlib 手册,它说:

ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen,
                           const Bytef *source, uLong sourceLen));
Run Code Online (Sandbox Code Playgroud)

将源缓冲区压缩到目标缓冲区。sourceLen 是源缓冲区的字节长度。输入时,destLen 是目标缓冲区的总大小,它必须至少是 compressBound(sourceLen) 返回的值。退出时,destLen 是压缩缓冲区的实际大小。

也许还a=1024不够大?我认为你需要打电话compressBound来获取合适的值。