2025 / 03 / 11
e2 studio开发环境下串口printf编译出错问题解决方案

原创:strongerHuang


最近看到有一些网友在讨论关于:瑞萨RA单片机在e2 studio环境下printf编译出错的问题。

这个问题我之前也遇到过,今天就来分享一下我得出的解决办法。

问题点:
在 e2 studio 集成开发环境下,使用串口 printf 打印时,会类似出现一个这样的错误:
C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/../../../../arm-none-eabi/bin/ld.exe: C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/thumb/v8-m.main+dp/hard\libg_nano.a(libc_a-closer.o): in function `_close_r':closer.c:(.text._close_r+0xc): undefined reference to `_close'
C:/Renesas/RA/e2studio_-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/../../../../arm-none-eabi/bin/ld.exe: C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/thumb/v8-m.main+dp/hard\libg_nano.a(libc_a-lseekr.o): in function `_lseek_r':lseekr.c:(.text._lseek_r+0x10): undefined reference to `_lseek'
C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/../../../../arm-none-eabi/bin/ld.exe: C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/thumb/v8-m.main+dp/hard\libg_nano.a(libc_a-readr.o): in function `_read_r':readr.c:(.text._read_r+0x10): undefined reference to `_read'
C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/../../../../arm-none-eabi/bin/ld.exe: C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/thumb/v8-m.main+dp/hard\libg_nano.a(libc_a-fstatr.o): in function `_fstat_r':fstatr.c:(.text._fstat_r+0xe): undefined reference to `_fstat'
C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/../../../../arm-none-eabi/bin/ld.exe: C:/Renesas/RA/e2studio_v2024-10_fsp_v5.6.0/toolchains/gcc_arm/13.2.rel1/bin/../lib/gcc/arm-none-eabi/13.2.1/thumb/v8-m.main+dp/hard\libg_nano.a(libc_a-isattyr.o): in function `_isatty_r':isattyr.c:(.text._isatty_r+0xc): undefined reference to `_isatty'
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:96: RA8D1_DEBUG.elf] Error 1

Build Failed. 6 errors, 0 warnings. (took 190ms)



网上最多的解决办法:
在这个路径下:
项目 -> C/C++ Project Settings -> C/C++构建 -> 设置 -> GUU Arm Cross C Linker -> Miscellaneous


勾选【Use float with nano printf (-u _ printf float)】这个选项,并清空【Other linker flags里面的内容。


但是,在 e2 studio V5版本(比如:V5.6.0)环境下,这个解决方法“失效”了,编译还是会出现【错误】。

然后,
网上又有了一种解决办法
在同样的路径下,勾选【Do not use syscalls (--specs=nosys.specs)】这个选项,如下图:


这样,确实能解决【编译出错】的问题,也能正常printf打印输出。

但会出现【警告】,如下图:


还有一种最理想的解决办法:
这个办法不会错误,也不会警告,也是我在用。那就是在同样的路径下,【Other linker flags】这里添加:


警告这样的配置之后,编译就会:0错误,0警告。


这里的配置,在e2 studio 以前的老版本是默认的,但这后面的版本,这里的配置默认是“空”了,我也搞不懂为啥。

这个解决办法在网上不容易找到,我找到了一个地方:

https://community.renesas.com/mcu/ra/f/forum/32521/fsp5-0-0-cannot-print-data-to-uart-by-redirecting-printf


以上三种解决办法,推荐用最后一种。

本文就分享到这里,希望对你有所帮助。

隐私条款

一、接受条款 使用者(也称"您")在访问或使用本网站及其服务时,即已经表示同意并不加修改地接受本《用户协议》、本网站的《隐私声明》、《法律声明》以及其关或相链接的网页和网站的条件和条款的规定。我们强烈建议:在您阅读和接受本《用户协议》时,也应阅读并接受本《用户协议》中所提到《隐私声明》、《法律声明》及其相关或相链接网页或网站所包含的资料,因为《隐私声明》、《法律声明》及其它相关网页或网站可能包含对您适用的进一步规定。(请注意:点击划有底线的词句即可链接到上述《隐私声明》、《法律声明》及其它相关或相链接的网页和网站。

 

二、使用者的资格要求 在本网站中"使用者"指的是浏览、阅读、使用本网站信息或服务的任何个人或组织。本网站的服务仅适用于根据相关法律的规定具有签订有约束力的合同的个人或组织并仅由其使用。本网站的服务不向18周岁以下的个人使用者提供,也不向临时被本网站中止或取消使用者资格的使用者提供。如果使用者不符合本条规定,请停止使用本网站或本网站的服务。