代码之家  ›  专栏  ›  技术社区  ›  erixoltan

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

  •  0
  • erixoltan  · 技术社区  · 2 周前

    我需要帮助构建一个使用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的干净安装上都尝试过,在这两种情况下都有相同的结果。

    1 回复  |  直到 2 周前
        1
  •  1
  •   Kamal Palei    2 周前

    你能按下面的方式做吗。

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

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