我需要帮助构建一个使用libzip的普通C程序。我有一个更复杂的版本,但在这里我要问的是尽可能简单的ZIP文件程序,以便于了解问题所在。
我尝试下载并构建libzip,但它对解决这个问题没有帮助。出于这个问题的目的,我给出了一组尽可能简单的步骤,让您可以轻松地帮助我。
首先,我安装了必要的软件包:
$ sudo apt install -y gcc libzip-dev
根据Ubuntu软件包的定义,以下是libzip-dev中包含的关键文件:
/usr/include/zip.h
/usr/include/zipconf.h
/usr/lib/x86_64-linux-gnu/cmake/libzip/libzip-config-version.cmake
/usr/lib/x86_64-linux-gnu/cmake/libzip/libzip-config.cmake
/usr/lib/x86_64-linux-gnu/cmake/libzip/libzip-targets-none.cmake
/usr/lib/x86_64-linux-gnu/cmake/libzip/libzip-targets.cmake
/usr/lib/x86_64-linux-gnu/libzip.so
这是我的测试程序。
$ cat sample.c
#include <stdio.h>
#include <zip.h>
int main(int argc, char *argv[])
{
char file_name[] = "my_zip_file.zip";
int err;
int FLAGS=0;
struct zip *Zip = zip_open(file_name, FLAGS, &err);
if (Zip == NULL) {
printf("Cannot open ZIP %s archive: %d\n", argv[1], err);
return err;
}
zip_close(Zip);
printf("success\n");
return 0;
}
现在我试图编译这个程序,但它不起作用。没有任何选项组合似乎有帮助。以下是我迄今为止尝试过的最有希望的事情:
$ gcc -I/usr/include -L/usr/lib/x86_64-linux-gnu -lzip sample.c
/usr/bin/ld: /tmp/ccemzluk.o: in function `main':
sample.c:(.text+0x56): undefined reference to `zip_open'
/usr/bin/ld: sample.c:(.text+0x97): undefined reference to `zip_close'
collect2: error: ld returned 1 exit status
我需要帮助解决这个基本的库/链接问题。我在Ubuntu 22.04和24.04的干净安装上都尝试过,在这两种情况下都有相同的结果。