arm-eabi-none未定义对LPC2148的memset错误的引用

时间:2018-01-08 10:08:55

标签: gcc makefile arm linker-errors

每当我尝试使用任何数组参数时,我都会收到memset()错误。此外,即使包含标准库,我也无法使用sprintf()语句,我应该在makefile中包含哪些参数来链接或修复此memset()sprintf()引用错误。

memset() error full code with lpc214x linker file

我的目标板是LPC2148(基于arm7-TDMA) 这是Makefile

ARMGNU ?= arm-none-eabi

COPS = -Wall -nostdlib -nostartfiles -ffreestanding 

all : main.hex main.bin main.elf

clean :
    rm -f *.o
    rm -f *.bin
    rm -f *.hex
    rm -f *.elf

crt0.o : crt0.S
    $(ARMGNU)-gcc -c crt0.S

main.o : main.c
    $(ARMGNU)-gcc $(COPS) -c main.c -o main.o

main.elf : lpc2148.ld crt0.o main.o 
    $(ARMGNU)-ld crt0.o main.o -T lpc2148.ld -o main.elf

main.bin : main.elf
    $(ARMGNU)-objcopy main.elf -O binary main.bin

main.hex : main.elf
    $(ARMGNU)-objcopy main.elf -O ihex main.hex

Error message

1 个答案:

答案 0 :(得分:0)

问题是您在链接操作期间使用arm-none-eabi-ld,无法链接到目标处理器的标准libgcc

请修改Makefile并使用arm-none-eabi-gcc链接各种目标文件。

因为您正在使用自定义启动文件,您还需要将-nostartfiles选项传递给链接器。

修改后的Makefile如下:

all : main.hex main.bin main.elf

clean :
    rm -f *.o
    rm -f *.bin
    rm -f *.hex
    rm -f *.elf

crt0.o : crt0.S
    $(ARMGNU)-gcc -c crt0.S

main.o : main.c
    $(ARMGNU)-gcc $(COPS) -c main.c -o main.o

main.elf : lpc2148.ld crt0.o main.o 
    $(ARMGNU)-gcc crt0.o main.o -T lpc2148.ld -o main.elf -nostartfiles

main.bin : main.elf
    $(ARMGNU)-objcopy main.elf -O binary main.bin

main.hex : main.elf
    $(ARMGNU)-objcopy main.elf -O ihex main.hex