C 中非常简单的 gcc 与 libzip 链接问题[重复]

问题描述 投票:0回答:1

我需要帮助构建一个使用 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 上尝试过此操作,两种情况下的结果相同。

c gcc ld libzip
1个回答
0
投票

你可以按照下面的方法做吗?

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

第一步编译,第二步构建可执行文件。

© www.soinside.com 2019 - 2024. All rights reserved.