将btod函数移出main.c后编译出现undefined reference错误求助
问题分析
出现undefined reference to 'btod'是链接阶段错误:编译器能通过头文件找到btod的函数声明,但链接时缺少包含该函数实现的btod.o目标文件。当前Makefile中,main目标仅依赖并链接了main.o,没有把btod.o加入链接流程。
修复步骤
修改Makefile中的main目标规则,将依赖和链接的目标文件补充btod.o,同时删除无意义的btod可执行文件编译规则:
CC = gcc INCLUDE = -I. CFLAGS = -g -Wall LDFLAGS = -L. \ -L/usr/lib LDLIBS = \ -lc -lm .c.o: $(CC) $(INCLUDE) $(CFLAGS) -c $< all: main # 补充btod.o到依赖项,链接时同时包含两个目标文件 main: main.o btod.o $(CC) -o $@ $^ $(LDFLAGS) $(LDLIBS) clean: rm -f *.o rm -f main
额外说明
- 原Makefile中的
btod目标是生成单独的btod可执行文件,但btod.c中没有main函数,这个规则完全无用,直接删除即可。 btod.h中的函数声明int btod(int size,char inputBin[size]);是合法的C变长数组语法,也可以写成更通用的int btod(int size, char *inputBin);,两者编译效果一致。
内容的提问来源于stack exchange,提问作者abg3342
相关产品推荐
相关产品推荐

