私は、楽しみと利益のために、C++のベアメタルcortex-M3に取り組んでいます。いくつかのコンテナが必要だったので、STLライブラリを使用します。アロケーターを提供するだけでは、使用するものだけが得られるため、最終的なバイナリに多くのコードを追加することはないと思いました。
それはすべてテンプレートコードだと思っていたので、実際には、STL(アロケータを与える)とのリンクプロセスをまったく期待していませんでした。
ちなみにコンパイル中です-fno-exception
。
残念ながら、私のバイナリには約600KB以上が追加されています。nmを使用して、最終的なバイナリに含まれている記号を調べましたが、それは冗談のようでした。リストはとても長いので、私はそれを通り過ぎようとはしません。いくつかの弱いシンボルがありますが。
リンカによって生成された.mapファイルも調べたところ、scanfシンボルも見つかりました。
.text
0x000158bc 0x30 /CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../arm-none-linux-gnueabi/libc/usr/lib/libc.a(sscanf.o)
0x000158bc __sscanf
0x000158bc sscanf
0x000158bc _IO_sscanf
と:
$ arm-none-linux-gnueabi-nm binary | grep scanf
000158bc T _IO_sscanf
0003e5f4 T _IO_vfscanf
0003e5f4 T _IO_vfscanf_internal
000164a8 T _IO_vsscanf
00046814 T ___vfscanf
000158bc T __sscanf
00046814 T __vfscanf
000164a8 W __vsscanf
000158bc T sscanf
00046814 W vfscanf
000164a8 W vsscanf
どうすればこれをデバッグできますか?最初に、GCCがリンクに何を使用しているのかを正確に理解したかった(私はGCCを介してリンクしている)。テキストセグメントで記号が見つかった場合、セグメント全体が使用されることは知っていますが、それでも多すぎます。
これに取り組む方法についての提案は本当にありがたいです。
ありがとう