我实现了一个 retarget.c 将 printf 输出重定向到串行端口进行调试,它可以被链接并且工作得很好,如果我的链接命令喜欢这样:
arm-none-eabi-gcc --specs=nano.specs --specs=nosys.specs -g -mcpu=cortex-m4 -mthumb -fmessage-length=0 -std=c99 -fno-builtin -Wl,--gc-sections -Wl,-Map=main.map -T"$(LINKERFILE)" -o main.elf main.o retarget.o $(BUILDDIR)/libs.a -Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group
但是当我归档retarget.o
到归档文件$(BUILDDIR)/libs.a
中时,链接命令喜欢这个:
arm-none-eabi-gcc --specs=nano.specs --specs=nosys.specs -g -mcpu=cortex-m4 -mthumb -fmessage-length=0 -std=c99 -fno-builtin -Wl,--gc-sections -Wl,-Map=main.map -T"$(LINKERFILE)" -o main.elf main.o $(BUILDDIR)/libs.a -Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group
可以链接成功,但是函数printf并没有向串口输出任何东西,看来我自己的版本函数,比如_write
retarget.c中的函数,在最终编译的程序中并没有用到。