我知道已经被问了很多时间但是我无法解决它...
所以我有一个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
错误
所以我错过了什么?
答案 0 :(得分:4)
不。 -I
用于包含头文件。您还需要使用-l
选项链接库。
注意:您可能需要使用-L
选项提供路径到库。
-llibrary
链接时搜索名为library的库......链接器搜索库的标准目录列表,该库实际上是名为
liblibrary.a
的文件。然后,链接器使用此文件,就好像它已按名称精确指定一样。
编辑:
引用同一手册的其余部分
在您编写此选项的命令中, where 会有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,
foo.o -lz bar.o
在文件z
之后但foo.o
之前搜索库bar.o
。如果bar.o
引用z
中的函数,则可能无法加载这些函数。
因此,您需要将-l<libanme>
放在编译语句的最后,因为s_echo.c
使用在该特定库中定义的函数。