日期:2014-05-16  浏览次数:20878 次

makefile的问题,找不到main的定义,写错了??
目录
client目录:
  --inluce
  --src
  --objs

include目录:
  --myStdio.h

src目录:
  --mystdio.c
  --echo_client.c

目录,有一个.h文件,两个.c文件,
mystdio.c include了incule/mystdio.h
echo_client.c include了incule/mystdio.h
main函数在echo_client.c里

下面是我的makefile,放在client目录下:

CC = gcc

OBJ_DIR = ./objs
SRC_DIR = ./src
INC_DIR = ./include
EXE = $(OBJ_DIR)/client

OBJS += $(OBJ_DIR)/myStdio.o \
$(OBJ_DIR)/echo_client.o

EXE:$(OBJS)
$(CC) $^ -o $@

cp $(EXE) ./

$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c
$(CC) $^ -o $@

clean:
rm -rf $(OBJ_DIR)./%.o $(EXE)



make出错:
/usr/lib/gcc/i686-redhat-linux/4.4.2/../../../crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [objs/myStdio.o] Error 1

请达人帮看一下,makefile哪里写得有不对



------解决方案--------------------
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c

这句,还有相关的变量不能直接使用 %.o %.c

不能这样写。

你需要把该目录下的文件生成一个清单,

在清单中使用 %.o

%.c

------解决方案--------------------
已经到link阶段了,应该不是编译问题。
crt1.o中的入口函数_start会引用main的地址,貌似没有找到main的地址,所以报错。
楼主可以贴一下你的main函数看看。