GCC:未定义的xxx引用

时间:2015-04-21 10:26:16

标签: c gcc linker makefile undefined-reference

我知道已经被问了很多时间但是我无法解决它... 所以我有一个src文件夹,我的main.c来源,srclib我的lib.c文件存储,include目录我lib.h存储文件。现在,makefile正确编译了lib,并将lib.a文件放在lib文件夹中。 main.c包含这样的lib:

#include "lib.h"

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

所以我错过了什么?

1 个答案:

答案 0 :(得分:4)

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

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

引用online gcc manual

  

-llibrary

     

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


编辑:

引用同一手册的其余部分

  

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

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