2

几天来我一直在寻找解决方法。到目前为止还没有运气。

我用什么:

  • STM32F103VET6
  • J-Link
  • RealView MDK-ARM v4.12
  • 我的程序中的 C 和 C++ 代码

在我的代码中包含 STL 之前,一切正常。我可以毫无问题地重新定位到 USART printf()scanf()这是通过包含Retarget.cRV-MDK 附带的内容并编写我自己的sendchar()getkey(). Retarget.c有一行#pragma import(__use_no_semihosting_swi)要求链接器使用 的重定向版本<cstdio>,而不是调用半主机实现。

但是当我开始#include <deque>and时deque<int> buffer;,它不再起作用了。似乎链接器已经决定<deque>取决于 semihosting <cstdio>,这与我刚刚编写的重定向代码冲突。

我尝试过但失败了:

  • 摆脱__no_semihosting_swi并尝试覆盖_sys_open(). 它不起作用,因为半主机<cstdio>依赖于已经导出此符号的目标文件。
  • 此处建议的用法$super$$$sub$$语法(我想我已经尝试了他们提供的所有内容!)
  • 使用“MicroLIB”。这是史诗般的失败。
  • 深入研究提供的 STL 标头。我发现没有引用任何stdio. 而且,由于我可以#include <cstdio>并且仍然有重新定位,我认为即使是参考也不会产生任何影响。

我怀疑该解决方案与指导链接器有关,但到目前为止我还没有弄清楚......这太令人沮丧了!

4

0 回答 0