这是我的链接器命令:
arm-none-eabi-ld boot_and_link/startup.o drivers/gpio.o ../programs/dmips/dhry_1.o ../programs/dmips/dhry_2.o -nostartfiles -T boot_and_link/linker.ld -L/usr/lib/gcc/arm-none-eabi/4.8/armv6-m -lgcc -L/usr/lib/arm-none-eabi/newlib/armv6-m/ -lc -L/usr/lib/arm-none-eabi/newlib/armv6-m/ -lnosys -o ../programs/dmips/dmips.elf
我正在使用我自己的启动代码和我自己的链接器脚本,因为我正在进行裸机编译,试图在Cortex M0处理器上运行Dhrystone基准测试。
这些是我得到的错误:
/usr/lib/arm-none-eabi/newlib/armv6-m//libc.a(lib_a-fvwrite.o): In function `__sfvwrite_r':
/home/tin/projects/debian/arm-toolchain/collab-maint/newlib/build/arm-none-eabi/armv6-m/newlib/libc/stdio/../../../../../../newlib/libc/stdio/fvwrite.c:196: undefined reference to `__aeabi_idiv'
/usr/lib/arm-none-eabi/newlib/armv6-m//libnosys.a(sbrk.o): In function `_sbrk':
/home/tin/projects/debian/arm-toolchain/collab-maint/newlib/build/arm-none-eabi/armv6-m/libgloss/libnosys/../../../../../libgloss/libnosys/sbrk.c:14: undefined reference to `end'
根据我的理解,结束符号应该是堆的结尾吗?我可以通过在链接描述文件中设置它来摆脱它。
然而另一个是奇怪的。该符号在libgcc.a中声明,包含在内。
在我看来,问题是一个简单的路径冲突:无论fvwrite.o是什么,它都希望使用该符号,并且链接器不在libgcc.a中查找它,它存在并作为参数库添加。请记住,这只是一个想法。我真的不知道发生了什么。
有什么想法吗?