Мне нужна помощь в создании тривиальной программы на C, использующей libzip. У меня гораздо более сложная версия, но здесь я спрашиваю о самой простой программе для работы с 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, в обоих случаях результат был одинаковым.





Можете ли вы сделать это, как показано ниже?
gcc -c -I/usr/include -L/usr/lib/x86_64-linux-gnu -lzip sample.c
gcc -o "sample" ./sample.o -lzip
На первом этапе компилируем, на втором этапе создаем исполняемый файл.
Не обязательно делать это в два этапа.
это можно сделать за один шаг, или, если это сложный проект, лучше использовать make-файл. я попытался решить основную проблему (ошибка ссылки) с помощью простого решения :-)
Это сработало! Именно так, как вы рекомендовали. Спасибо!
Поставьте
-lzipв конце.