Arm 与newlib链接:对memcpy的未定义引用

Arm 与newlib链接:对memcpy的未定义引用,arm,ld,newlib,bare-metal,Arm,Ld,Newlib,Bare Metal,我正在尝试构建一个arm引导加载程序,它依赖于newlib来提供一些系统调用(比如memcpy) 当我跑步时: arm-elf-ld -static -L /usr/arm-elf/lib/thumb/ -lc -nostdlib -nostartfile -Map=loader.map --cref -T loader.lds --gc-sections -Ttext 0x000000 -n -o loader.elf start.o _udivsi3.o _umodsi3.o main.o

我正在尝试构建一个arm引导加载程序,它依赖于newlib来提供一些系统调用(比如memcpy)

当我跑步时:

arm-elf-ld -static -L /usr/arm-elf/lib/thumb/ -lc -nostdlib -nostartfile -Map=loader.map --cref -T loader.lds --gc-sections -Ttext 0x000000 -n -o loader.elf start.o _udivsi3.o _umodsi3.o main.o util.o gpio.o spi.o flashatmel.o flashjedec.o image.o time.o clock.o led.o register.o sdram.o
我得到以下信息:

 flashatmel.o flashjedec.o image.o time.o clock.o led.o register.o sdram.o            
 main.o: In function `TtyPutConfiguration':
/home/shawn/projects/netbridge-fx/loader/main.c:19: undefined reference to `memcpy'
main.o: In function `main':
/home/shawn/projects/netbridge-fx/loader/main.c:135: undefined reference to   `__gnu_thumb1_case_uqi'
/home/shawn/projects/netbridge-fx/loader/main.c:145: undefined reference to `__gnu_thumb1_case_uqi'
/home/shawn/projects/netbridge-fx/loader/main.c:155: undefined reference to `__gnu_thumb1_case_uqi'
/home/shawn/projects/netbridge-fx/loader/main.c:165: undefined reference to `__gnu_thumb1_case_uqi'
gpio.o: In function `GpioTest':
/home/shawn/projects/netbridge-fx/loader/gpio.c:139: undefined reference to `__gnu_thumb1_case_uqi'
现在,我正在攻击memcpy,希望其他人也能效仿。当我运行
nm/usr/arm-elf/lib/thumb/libc.a
(我相信这是libc的新lib版本)时,它显示:

lib_a-memcpy.o:
00000010 N $d
00000000 t $t
00000001 T memcpy
因此,这表明memcpy是在库中定义的

我在上面的
ld
命令上运行了
strace
,以确保它实际上正在查看该文件,事实上,确实如此

我错过了什么?为什么它抱怨一个未定义的memcpy?

这看起来很可疑:

-lc -nostdlibs
我想,诺斯托利布斯取消了信用证。尝试直接链接libc.a,看看会发生什么


当您使用它时,我看到您正在链接一些内在的实现(如_udivsi3.o)。尝试链接libgcc.a,它应该有您需要的所有内部函数的定义。

直接链接文件是有效的,尽管我仍然不确定为什么
-lc
-L
组合使用不起作用,即使没有
-nostdlib
。有什么想法吗?