我一直在寻找解决方法好几天。到目前为止没有运气。
我用的是什么:
在我的代码中包含STL之前,一切正常。我可以毫无问题地将printf()
和scanf()
重新定位到USART。这是通过包含RV-MDK附带的Retarget.c
并编写我自己的sendchar()
和getkey()
来完成的。 Retarget.c
有一行代表#pragma import(__use_no_semihosting_swi)
,要求链接器使用重定向版<cstdio>
,而不是调用半主机实现。
但是当我开始#include <deque>
和deque<int> buffer;
时,它就不再起作用了。似乎链接器已经确定<deque>
依赖于半主机<cstdio>
,这与我刚才写的重定向代码冲突。
我尝试过但失败了:
__no_semihosting_swi
,而是尝试覆盖_sys_open()
。它不起作用,因为半主机<cstdio>
依赖于已导出此符号的目标文件。$super$$
和$sub$$
语法建议here(我想我已尝试过他们提供的所有内容!)stdio
的引用。而且,既然我可以#include <cstdio>
并且仍然有重新定位,我认为即使参考也没有任何区别。 我怀疑解决方案与指向链接器有关,但到目前为止我还没想到......这太令人沮丧了!