ARM - C - arm-none-eabi-ld:找不到 vsprintf、strcpy

ARM - C - arm-none-eabi-ld : not finding vsprintf,strcpy

关于Ubuntu我交叉编译一个代码raspberry pi

但是当我尝试 link 对象时 使用标准 c 库 我刚刚添加了

arm-none-eabi-ld -g vectors.o notmain.o bm_bcm2835.o uart.o -T memmap -o notmain.elf

它抱怨找不到标准函数

uart.c:135: undefined reference to `strcpy'
uart.c:142: undefined reference to `vsprintf'

到目前为止我尝试添加 -lc -lgcc 但是 linker 抱怨它也找不到它们

arm-none-eabi-ld: cannot find -lc
arm-none-eabi-ld: cannot find -lgcc

我尝试将这些标志添加到编译器,它编译正常,但是 linker 抛出相同的错误

知道出了什么问题吗?

这是生成文件:

ARMGNU ?= arm-none-eabi

AOPS = --warn --fatal-warnings
COPS = -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding -g
LDOPS = -g

all : kernel.img

clean :
rm -f *.o
rm -f *.bin
rm -f *.hex
rm -f *.srec
rm -f *.elf
rm -f *.list
rm -f *.img

vectors.o : vectors.s
$(ARMGNU)-as $(AOPS) vectors.s -o vectors.o

uart.o : uart.c
$(ARMGNU)-gcc $(COPS) -c uart.c -o uart.o -lc -lgcc

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

notmain.elf : memmap vectors.o notmain.o uart.o
$(ARMGNU)-ld $(LDOPS) vectors.o notmain.o uart.o -T memmap -o notmain.elf
$(ARMGNU)-objdump -D notmain.elf > notmain.list

kernel.img : notmain.elf
$(ARMGNU)-objcopy --srec-forceS3 notmain.elf -O srec notmain.srec
$(ARMGNU)-objcopy notmain.elf -O binary kernel.img

感谢你在这方面帮助我

如果您使用 -nostdlib -nostartfiles -ffreestanding 构建,您是在告诉编译器(驱动程序)您不想为标准 C 环境构建。因此,vfprintfstrcpy 等标准 C 函数不可用,无法使用。

因为它是裸机,所以没有标准 c 函数的子结构

所以这是一个如何使用 newlib

实现裸机子系统(堆等)的示例

https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=280209&p=1697302#p1697302