Очень простая проблема связывания gcc в C с libzip

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

Поставьте -lzip в конце.

Eric Postpischil 05.05.2024 02:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Можете ли вы сделать это, как показано ниже?

gcc -c -I/usr/include -L/usr/lib/x86_64-linux-gnu -lzip sample.c
gcc  -o "sample"  ./sample.o   -lzip

На первом этапе компилируем, на втором этапе создаем исполняемый файл.

Не обязательно делать это в два этапа.

user207421 05.05.2024 02:47

это можно сделать за один шаг, или, если это сложный проект, лучше использовать make-файл. я попытался решить основную проблему (ошибка ссылки) с помощью простого решения :-)

Kamal Palei 05.05.2024 03:04

Это сработало! Именно так, как вы рекомендовали. Спасибо!

erixoltan 05.05.2024 03:06

Другие вопросы по теме