硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3308|回复: 3
收起左侧

[有问必答] 不使用microlib,添加FILE __stdout后,编译出错

[复制链接]

11

主题

30

回帖

63

积分

初级会员

积分
63
发表于 2022-7-2 12:37:59 | 显示全部楼层 |阅读模式
工程使用C++,不能使用microlib库,在文件中添加支持函数如下
[C] 纯文本查看 复制代码
int _ttywrch(int ch)    
{
    ch=ch;
	return ch;
}
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 
	/* Whatever you require here. If the only file you are using is */ 
	/* standard output using printf() for debugging, no file handling */ 
	/* is required. */ 
}; 
/* FILE is typedef’ d in stdio.h. */ 
FILE __stdout; 
FILE __stdin; 
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 


编译报错
PSDK_SIimbal_SBGC\PSDK_SIimbal_SBGC.axf: Error: L6200E: Symbol __stdout multiply defined (by stdio_streams.o and main.o).
PSDK_SIimbal_SBGC\PSDK_SIimbal_SBGC.axf: Error: L6200E: Symbol __stdin multiply defined (by stdio_streams.o and main.o).
删除FILE __stdout;FILE __stdin;后,printf不能使用。因为使用的部分库中可能使用了printf函数,所以不能删除这两个函数
这种问题怎么解决啊
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2022-7-3 00:13:34 | 显示全部楼层
直接使用MDK RTE一键添加,非常方便,需要用户处理使用C标准库还是微库的问题了。

image.png
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2024-6-18 18:36:24 | 显示全部楼层
工程里全局查找一下是不是有地方调用了fopen,fclose,fprintf,fflush,assert等函数并屏蔽
https://developer.arm.com/documentation/ka003082/latest附一个ARM官方的问题解决方法
回复

使用道具 举报

6

主题

9

回帖

27

积分

新手上路

积分
27
发表于 2025-7-15 12:52:05 | 显示全部楼层
eric2013 发表于 2022-7-3 00:13
直接使用MDK RTE一键添加,非常方便,需要用户处理使用C标准库还是微库的问题了。

方法简单有效只需要提供重定向函数即可
[C] 纯文本查看 复制代码
int stdout_putchar(int ch)
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 100);
	return ch;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-11 21:05 , Processed in 0.040583 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表