gcc编译zlib和minizip生成压缩文件到zip格式的程序

下载 https://www.zlib.net/zlib-1.3.1.tar.gz 并保存到 /par
然后解压缩

tar xf zlib-1.3.1.tar.gz
cd /par/zlib-1.3.1
./configure
make

就在/par/zlib-1.3.1目录下生成了libz.so.1.3.1等动态库,libz.a静态库及minizip等示例程序。

如果要单独编译minizip,也可到 /par/zlib-1.3.1/contrib/minizip目录下执行make。

假如有一个自己调用zlib和minizip的源代码test_zip.c,

#include "zlib.h"
#include "zip.h"
 
int main() {
    zipFile zf = zipOpen("example.zip", APPEND_STATUS_CREATE);
    if (!zf) {
        // 处理错误...
    }
 
    int err = zipOpenNewFileInZip(zf, "file_to_compress.txt", 
                                   NULL, NULL, 0, NULL, 0, NULL, 
                                   Z_DEFLATED, Z_DEFAULT_COMPRESSION);
    if (err != ZIP_OK) {
        // 处理错误...
    }
 
    FILE *file_to_add = fopen("file_to_compress.txt", "rb");
    if (!file_to_add) {
        // 处理错误...
    }
 
    char buffer[1024];
    int len;
    while ((len = fread(buffer, 1, sizeof(buffer), file_to_add)) > 0) {
        zipWriteInFileInZip(zf, buffer, len);
    }
    fclose(file_to_add);
 
    zipCloseFileInZip(zf);
    zipClose(zf, NULL);
    return 0;
}

可这样编译并执行:

gcc test_zip.c /par/zlib-1.3.1/contrib/minizip/zip.c /par/zlib-1.3.1/contrib/minizip/ioapi.c -L /par/zlib-1.3.1 -o test_zip -I /par/zlib-1.3.1/ -I /par/zlib-1.3.1/contrib/minizip -lz

在当前目录下,造一个file_to_compress.txt文件,然后./test_zip即可。
注意这个文件静态编译了minizip的相关代码,但动态链接系统libz.so。
如果要把zip相关文件全静态链接,这样写

gcc test_zip.c /par/zlib-1.3.1/contrib/minizip/zip.c /par/zlib-1.3.1/contrib/minizip/ioapi.c -L /par/zlib-1.3.1 -o test_zips -I /par/zlib-1.3.1/ -I /par/zlib-1.3.1/contrib/minizip /par/zlib-1.3.1/libz.a

即把-lz改成静态库的路径。

可以用ldd命令来查看依赖的动态库,可见test_zips已经没有对libz.so.1的依赖了。

:/shujv/par$ ldd test_zip
./test_zip: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./test_zip)
	linux-vdso.so.1 =>  (0x0000007fb18b7000)
	/usr/lib/libzfh.so (0x0000007fb181d000)
	libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000007fb17d5000)
	libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fb168e000)
	libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007fb1662000)
	libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000007fb164f000)
	/lib/ld-linux-aarch64.so.1 (0x0000007fb188c000)


:/shujv/par$ ldd test_zips
./test_zips: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./test_zips)
	linux-vdso.so.1 =>  (0x0000007fae118000)
	/usr/lib/libzfh.so (0x0000007fae07e000)
	libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fadf18000)
	libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007fadeec000)
	libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000007faded9000)
	/lib/ld-linux-aarch64.so.1 (0x0000007fae0ed000)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值