gcc: 对“fy_library_version”的未定义引用

gcc: undefined reference to `fy_library_version'

我正在尝试检查我的 libfyaml 安装是否成功,因为我必须在项目中使用该库。我从源代码构建它并且安装顺利,但是当我使用 gcc test.c -o test 编译测试程序时,出现此错误:

/usr/bin/ld: /tmp/ccPsUk6E.o: in function `main':
test.c:(.text+0x14): undefined reference to `fy_library_version'
collect2: error: ld returned 1 exit status

我检查了路径,确实libfyaml.h位于/usr/local/include。该路径也很好,GCC 将其列为 headers 的路径。我也尝试过使用 -I-l-L 选项。但是,它仍然给出相同的错误。

如何解决这个问题?我在 Ubuntu 20 (WSL)。

测试程序供参考:

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <stdlib.h>
#include <stdio.h>

#include <libfyaml.h>

int main(int argc, char *argv[])
{
    printf("%s\n", fy_library_version());
    return EXIT_SUCCESS;
}

Link 到图书馆:Github

包含库时,需要将 -l 参数传递给编译器

不要引用我的话,但是从名称来看,库名称应该是“fyaml”,所以命令如下 gcc test.c -o test.o -lfyaml

GCC 有两个主要组件:编译器和链接器。包括 headers 是你做对的部分,你基本上让编译器知道 fy_library_version 是用正确的参数和 return 类型调用的。

但是,编译器不知道调用此类函数后会发生什么,并且检查该函数的任何代码是否存在的职责被推迟到后面的阶段:链接器。

链接器确实引发了您看到的错误

ld returned 1 exit status

这是因为链接器不知道您正在使用哪些库,因此无法知道在哪里可以找到您的功能代码。要解决这个问题,您应该告诉 gcc 您正在使用哪些库:

gcc test.c -lfyaml -o test