私は何日も回避策を探していました。これまでのところ運がありません。
私が使用するもの:
- STM32F103VET6
- Jリンク
- RealView MDK-ARM v4.12
- プログラム内の C コードと C++ コードの両方
コードに STL を含める前は、すべて正常に動作していました。問題なく USART にprintf()
リターゲットできます。scanf()
これはRetarget.c
、RV-MDK に付属の をインクルードし、独自のsendchar()
andを作成することによって行われ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$$
構文(提供されたものはすべて試したと思います!) - 「マイクロLIB」を使用してください。エピックフェイルです。
- 提供された STL ヘッダーを掘り下げます。への参照は見つかりません
stdio
でした。そして、私#include <cstdio>
はリターゲティングができるし、今でもできるので、リファレンスでさえ何の違いもないと思います。
解決策はリンカーの指示と関係があると思いますが、これまでのところ私は理解していません...これはとてもイライラしています!