【发布时间】:2016-12-05 19:34:45
【问题描述】:
我正在尝试制作bitcount 基准应用程序的 Makefile。原始 Makefile 有效,但我想根据需要更改 Makefile。我想先创建一个目标文件,然后用它来创建.elf和.bin文件。
bitcnts: ${FILE} Makefile
gcc -static ${FILE} -O3 -o bitcnts
但我收到一条错误消息,提示 undefined reference to main':
/opt/riscv/bin/../lib/gcc/riscv64-unknown elf/4.9.2/../../../../riscv64-unknown-
elf/lib/soft-float/32/crt0.o:
In function `.L0 ': (.text+0x40): undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:23: recipe for target 'prog.elf' failed
make[1]: *** [prog.elf] Error 1
尝试的 Makefile 如下所示:
CROSS=riscv64-unknown-elf-
CC=$(CROSS)gcc
LD=$(CROSS)g++
OBJCOPY=$(CROSS)objcopy
LIB_O=$(LIB)mutex.o $(LIB)wrap_malloc.o
CFLAGS_SYS=-m32 -msoft-float
LDFLAGS_SYS=-m32 -msoft-float -T$(LDFILE) -Wl,--wrap,malloc -Wl,--wrap,free -Wl,
--wrap,calloc -Wl,--wrap,realloc -Wl,--wrap,_malloc_r -Wl,--wrap,_free_r -Wl,
--wrap,_calloc_r -Wl,--wrap,_realloc_r
CFLAGS=-g $(CFLAGS_SYS) -O2 -std=gnu99 -Wall -I$(LIB) -I./
LDFLAGS=-g $(LDFLAGS_SYS)
FILE = bitcnt_1.c bitcnt_2.c bitcnt_3.c bitcnt_4.c bitcnts.c bitfiles.c
bitstrng.c bstr_i.c
MAIN = bitcnts
.PHONY : all
all: prog.elf
prog.bin : prog.elf
@${OBJCOPY} -R .uncached -R .tileram -O binary $< $@
prog.elf : $(MAIN).o $(LIB_O)
@${LD} $^ -o $@ ${LDFLAGS}
$(MAIN).o : $(FILE)
@${CC} ${CFLAGS} -c $< -o $@
.PHONY: build
build: all
然后构建:
# Build
.PHONY: bitcount-build
bitcount-build:
@make -C $(MIBENCH)/automotive/bitcount build
# Run
.PHONY: bitcount-run
bitcount-run:
@make -C $(MIBENCH)/automotive/bitcount run
【问题讨论】:
-
可能你在 Makefile 中列出的所有文件都没有 main 函数
-
请显示
make尝试运行的实际命令。从规则中删除@符号可能会有所帮助。 -
@bruceg
bitcnts.c有一个主函数。 -
@BenVoigt 我添加了 make 命令。
-
不,我的意思是
make扩展@${CC} ${CFLAGS} -c $< -o $@进入并运行的命令。
标签: c makefile compiler-errors