下载 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)
812

被折叠的 条评论
为什么被折叠?



