gcc退出,未定义引用头文件中的函数

时间:2013-07-04 20:52:19

标签: c gcc include makefile

我想编译一个小程序,它有一个非常直接的makefile,但我似乎无法让它工作。也许你可以帮助我。 makefile具有以下目标:

visca-cli: visca-cli.c libvisca_hl.o
    gcc -Wall -o visca-cli visca-cli.c /usr/local/lib/libvisca.so libvisca_hl.o

libvisca_hl.o: libvisca_hl.c
    gcc -Wall -c libvisca_hl.c

我可以'成功创建libvisca_hl.o'并创建.o文件。但是'make visca-cli'失败并出现错误消息,如

  

libvisca_hl.c :(。text + 0x468a):未定义的引用   `VISCA_get_md_disptime'

对于libvisca.h中定义的每个函数(这里是VISCA_get_md_disptime)

以下是各种文件的包含部分(省略标准库):

在visca-cli.c:

#include "libvisca.h"
#include "libvisca_hl.h"

在libvisca_hl.c中:

#include "libvisca_hl.h"

在libvisca_hl.h中:

#include "libvisca.h"

所有包含“”的包含在我运行make的本地目录中以及所有源文件所在的位置。没有子文件夹。所以我猜问题就在于makefile?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

编译/链接命令行中的库和对象的顺序很重要。在您的情况下,您只需要将共享对象放在最后:

gcc -Wall -o visca-cli visca-cli.c libvisca_hl.o /usr/local/lib/libvisca.so

在大多数系统/usr/local/lib已经是标准库搜索路径的一部分,因此您可以进一步简化:

gcc -Wall -o visca-cli visca-cli.c libvisca_hl.o -lvisca