組み込み機器で、C++

KPIT のC++で、STL vector が使えない問題で、多少の進展があったが、まだ解決していない。

まず、基本として、C++ の場合、グローバルコンストラクターを起動時に実行しておく必要があって、その実行アドレスのリストを、section .ctors に並べてあり、また、デストラクターは、.dtros に並べてある。
※.dtors のデストラクターリストは、exitで呼ばれるのだが、組み込みでは、終了する事が無いので、これは無視しても良いのかな!?

通常これは、crt0.o のスタートアップオブジェクトから、__main関数が呼ばれて、その中で実行するのが通例のようだが、組み込みプログラムなので、crt0.oは使っていない。
※「__main」は C++ の初期化関数で、「_main」とは区別される。
※良く考えたら、必要なのだが、C のプログラムが綺麗に走るようになってから、すっかり忘れていた。

で、そのリストをメモリー上に置いて、実行したけど、それでもvectorはうんともすんとも動かない(泣)
まだ何かあるようだ・・・

それと、もう一つ・・
g++ の libstdc++.a ライブラリーだが、これをリンクするだけで、非常に巨大となり、今回のようなシステムでは、ちょっと使えない感じ、vectorやstringを使うだけで、100キロバイト程大きくなる。
※iostream を使うと、300キロとか大きくなる。
他にmapやlistなど色々使うとさらに巨大となるので、今回は標準のこのクラスを使うのは難しいかもしれない・・

自分用の小規模で機能を絞ったSTLに相当する物を用意すれば良い気もするが、これは相当大変そうである。
※template プログラムは、先人が創ったように完成度が高く、絶妙で巧妙な仕組みを用意するのは、自分のスキルを越えていると思う。

-----
KPIT はあきらめて、gcc をソースコードからビルドする試みも試しているが、cygwinでちゃんとコンパイル出来ないでいる。
コンパイルは通っても、make check ではねられる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください