You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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
额外说明
  1. 原Makefile中的btod目标是生成单独的btod可执行文件,但btod.c中没有main函数,这个规则完全无用,直接删除即可。
  2. btod.h中的函数声明int btod(int size,char inputBin[size]);是合法的C变长数组语法,也可以写成更通用的int btod(int size, char *inputBin);,两者编译效果一致。

内容的提问来源于stack exchange,提问作者abg3342

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:55:17