尝试编译我的程序,该程序包含三个名为hencode.c
,hdecode.c
和htable.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
答案 0 :(得分:0)
尝试编译我的程序,该程序有两个名为
hencode.c
和hdecode.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