ARM Cortex M4F未定义的printf参考

时间:2017-03-02 14:31:27

标签: c arm printf bare-metal

基本上我想使用stdio函数,例如printf,puts,scanf等,在我的16x2 LCD显示器上或通过串口或I2C端口或任何我想要的东西进行打印。

我正在使用arm-none-eabi编译器和newlib。在我的研究中,我发现我必须实现编写支持OS子程序,这是有意义的,因为没有底层操作系统实现stdin和stdout。

  

如果您的系统没有提供其中一些子程序 - 在极端情况下,如果您正在为“裸板”系统开发软件而没有操作系统 - 您至少需要提供无操作的存根(或者具有最小功能的子程序)允许程序与libc.a中的子程序链接。   https://sourceware.org/newlib/

那么,问题是我必须定义或重新定义这些子程序?因为我试图在一个随机文件中进行,所有我得到的就是编译错误

undefined reference to `puts'

当我期待newlib文件到目前为止我能找到的所有内容都是stdio.h文件中的这段内容

typedef int cookie_close_function_t(void *__cookie);
typedef struct
{
/* These four struct member names are dictated by Linux; hopefully,
they don't conflict with any macros.  */
  cookie_read_function_t  *read;
  cookie_write_function_t *write;
  cookie_seek_function_t  *seek;
  cookie_close_function_t *close;
} cookie_io_functions_t;

最后,这就是我使用编译器的方式,也许我错过了一些东西,或者标语错了。

arm-none-eabi-gcc -o build/dummy.o src/dummy.c -g -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -Os -ffunction-sections -fdata-sections -MD -std=c99 -Wall -pedantic -DPART_tm4c123gh6pm -c -I./inc -I/home/user/lib/TivaWare -DTARGET_IS_BLIZZARD_RA1

arm-none-eabi-ld -o build/a.out build/blink.o build/startup_gcc.o build/uart.o -T tm4c123gh6pm.ld --entry ResetISR --gc-sections

PD:我假设C库是默认链接的,如果我按照那里的几个人的建议显式添加-l选项ld命令,那么我得到这个错误:

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

0 个答案:

没有答案