GCC:对 xxx 的未定义引用

jac*_*ast 0 c linker gcc makefile undefined-reference

我知道这个问题已经被问了很多次了,但我无法真正解决它......所以我有一个src文件夹,其中包含我的main.c源代码,一个存储srclib我的文件的文件夹,以及一个存储我的文件的目录。现在 makefile 正确编译了 lib 并将文件放入文件夹中。包括这样的库:lib.cincludelib.hlib.alibmain.c

#include "lib.h"
Run Code Online (Sandbox Code Playgroud)

它是用-I ../include选项编译的,但是当我编译它时,我得到undefined reference to xxx库中每个函数的错误

那么我错过了什么?

Sou*_*osh 5

没有。-I用于包含头文件。您还需要使用选项链接到库-l

注意:您可能需要提供库路径使用-L选项。

引用在线gcc手册

-llibrary

链接时搜索名为library的库……链接器在标准目录列表中搜索该库,该库实际上是一个名为liblibrary.a. 然后链接器使用该文件,就好像它是通过名称精确指定的一样。


编辑:

引用同一手册的其余部分

在命令中编写此选项的位置会有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,在文件之后但在.之前foo.o -lz bar.o搜索库。如果引用 中的函数,则可能不会加载这些函数。zfoo.obar.obar.oz

因此,您需要将 放在-l<libanme>编译语句的最后,因为s_echo.c使用该特定库中定义的函数。