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
我正在尝试检查我的 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