c-如何使用gcc在windows上使用zlib进行编译



我的目标是在编译应用程序文件的同时编译zlib,我使用tdm-gcc中的gcc,并克隆了存储库https://github.com/madler/zlib

/example中,有一个zpipe.c文件使用了该库,但我似乎无法在windows上编译它。

我在编译命令的末尾添加了-lz,收到了/x86_64-w64-mingw32/bin/ld.exe: cannot find -lz错误。

如果我试图只使用-Izlib进行编译,我最终会出现以下错误:

$ gcc -Izlib zpipe.c -o zpipe
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x6a): undefined reference to `deflateInit_'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0xca): undefined reference to `deflateEnd'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x12e): undefined reference to `deflate'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x1be): undefined reference to `deflateEnd'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x23c): undefined reference to `deflateEnd'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x2c0): undefined reference to `inflateInit_'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x320): undefined reference to `inflateEnd'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x36f): undefined reference to `inflate'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x3d1): undefined reference to `inflateEnd'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x440): undefined reference to `inflateEnd'
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:Users[redacted]AppDataLocalTempccjXicsi.o:zpipe.c:(.text+0x474): undefined reference to `inflateEnd'
collect2.exe: error: ld returned 1 exit status

非常感谢您的帮助!我已经搜索了堆栈溢出,尝试了所有的建议,也在谷歌上搜索了一下,但我仍然有问题。

这些错误看起来微不足道,我过去也纠正过这样的错误,但这次我被卡住了,我不确定还能尝试什么

1(创建静态库

.c.h文件所在的zlib文件夹中,运行gcc -c *.c将生成可用于构建库的.o

在您拥有.o文件后,运行ar -rc libz.a *.o将生成libz.a的文件,这将允许您通过-lz进行链接

2( 将zpipe.c编译为zpipe.exe

zpipe.c放入libz.a所在的文件夹中,这是为了在编译时简化。

运行gcc -L. zpipe.c -o zpipe.exe -lz将创建zpipe.exe.

3( 快速演示

创建一个包含Hello World!的文件hello.txt

运行./zpipe.exe < hello.txt > output.txt,这将在hello.txt中膨胀数据,并将其放入output.txt

运行./zpipe.exe -d < output.txt > original.txt解压缩文件,您将看到Hello World内部原始.txt

定义

-L.告诉gcc将当前文件夹用于头文件。

-lz告诉gcc使用静态库进行编译,该静态库的名称以lib开头,以结尾。例如,libexample.a将是-lexample

使用MSYS2 shell时非常简单,只需运行以下命令(用所需位置替换/usr/local(:

INSTALLPREFIX=/usr/local
wget -c http://www.zlib.net/zlib-1.2.12.tar.gz
tar xfz zlib-1.2.12.tar.gz
cd zlib-1.2.12
make -f win32/Makefile.gcc install 
SHARED_MODE=1 
INCLUDE_PATH=$INSTALLPREFIX/include 
LIBRARY_PATH=$INSTALLPREFIX/lib 
BINARY_PATH=$INSTALLPREFIX/bin 

相关内容

  • 没有找到相关文章

最新更新