Preciso de ajuda para construir um programa C trivial que use libzip. Eu tenho uma versão muito mais complexa, mas aqui estou perguntando sobre o programa de arquivo ZIP mais simples possível para facilitar a visualização de qual é o problema.
Tentei baixar e construir o libzip e isso não ajudou com o problema. Para efeitos desta pergunta, estou fornecendo o conjunto de etapas mais simples possível para facilitar a sua ajuda.
Primeiro instalei os pacotes necessários:
$ sudo apt install -y gcc libzip-dev
De acordo com a definição do pacote Ubuntu, aqui estão os arquivos críticos incluídos no 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
Aqui está meu programa de teste.
$ 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;
}
Agora tento compilar o programa e não funciona. Nenhuma combinação de opções parece ajudar. Aqui está a coisa mais promissora que tentei até agora:
$ 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
Preciso de ajuda para descobrir esse problema básico de biblioteca/vinculação. Tentei isso no Ubuntu 22.04 e também em uma instalação limpa do 24.04, com o mesmo resultado em ambos os casos.
Você pode fazer como abaixo.
Na primeira etapa compile, na segunda etapa construa o executável.