Makefile可能错误,未定义C语言中的函数引用

时间:2018-05-10 03:07:33

标签: c makefile terminal compiler-errors compilation

尝试编译我的程序,该程序包含三个名为hencode.chdecode.chtable.c的源文件。 htable.c文件包含前两个文件使用的所有函数,htable.h文件包含原型。这是我的Makefile,但我在终端上遇到undefined reference to 'function'错误。

两个文件都没有正确编译。 我使用此命令编译文件:gcc -o hdecode -Wall -ansi -pedantic hdecode.c

我不知道出了什么问题。我在所有文件中都加了"htable.h"。我认为错误可能在Makefile中,但我无法发现它。谢谢你的帮助。

这是我的Makefile:

CC      = gcc
CFLAGS = -Wall -ansi -pedantic -g -std=c99
LD      = gcc

all: hdecode hencode

hdecode: htable.o hdecode.o
    $(LD) $(LDFLAGS) htable.o hdecode.o -o hdecode

hencode: htable.o hencode.o
    $(LD) $(LDFLAGS) htable.o hencode.o -o hencode

hdecode.o: hdecode.c
    $(CC) $(CFLAGS) -c hdecode.c

hencode.o: hencode.c
    $(CC) $(CFLAGS) -c hencode.c

htable.o: htable.c
    $(CC) $(CFLAGS) -c htable.c

clean:
    @rm *.o hdecode hencode

1 个答案:

答案 0 :(得分:0)

  

尝试编译我的程序,该程序有两个名为hencode.chdecode.c的源文件。 htable.c文件包含两个文件都使用的所有函数,htable.h文件包含原型。

请注意,您的程序由三个源文件组成,而不是两个。链接最终程序时,您需要在htable.c中定义符号。换句话说,#include - 文件不会在最终程序中自动编译或链接它。

  

我的hencode文件正在正确编译,但我的hdecode文件却没有。我使用此命令编译文件:gcc -o hdecode -Wall -ansi -pedantic hdecode.c

目前还不清楚 - 您是使用Makefile还是手动编译?如果是后者,则需要传递两个源文件(如果先前已编译,则传递目标文件):

# Note the added htable.c
gcc -o hdecode -Wall -ansi -pedantic htable.c hdecode.c

最后,还要注意Makefile可以简化:

CC      = gcc
CFLAGS = -Wall -ansi -pedantic -g -std=c99

all: hdecode hencode

hdecode: htable.o hdecode.o
hencode: htable.o hencode.o
hdecode.o: hdecode.c
hencode.o: hencode.c
htable.o: htable.c

clean:
    @rm *.o hdecode hencode