我的目标是在编译应用程序文件的同时编译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