我需要帮助构建一个使用 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 上尝试过此操作,两种情况下的结果相同。
你能按照下面的方法做吗?
在第一步编译中,在第二步中构建可执行文件。