2016-08-14 18 views
0

私は組み込みシステム上でC++で書かれたライブラリを移植しようとしています。組み込みシステムはARMプラットフォームのCプログラミング言語で書かれています。私はそれが可能であると考えていました。 C++プログラミング言語はC言語よりはるかに複雑です。ベアボード上のC++組み込みシステム

C++ライブラリは環境が正しく動作する必要がありますか?私がそれをしたら、私は遭遇するかもしれない問題。

  1. C++のOOPモデルは、特殊なメモリ管理システムが必要です。[新、削除、スマートポインタ]
  2. C++の例外処理、神話のようなものであることが私には思えます。私の知る限り、WinCEのC++例外処理にはARMコア/カーネルのサポートが必要です。こうした実行時型情報

として

  • その他の機能は、あなたは私と一緒にいくつかの経験を共有してくださいでした。どうもありがとうございます。

  • +0

    Cでこのlibを持つ必要がありますか?あるいは、それをコンパイルして通信するC APIを提供するだけですか? – JVApen

    +0

    コンパイラは何を言っていますか? –

    +0

    さて、あなたはそれと "コミュニケーション"することができますが、どうですか?ライブラリはあなたのシステムのどこかで走らなければなりませんか?例えば、RTOSでは、コミュニケーションのためにこのライブラリをタスクに追加できますか? – Dongguo

    答えて

    0

    C++プログラムをC言語に書き換えようとすると、組み込み環境でC++プログラムを実行しようとすると、(ほとんど)変更されないという疑問があります。 #1の場合は、あなたの心を使うべきです。何も問題はありません(それは非常に長い時間がかかります...)#2の場合、それは容易ではありません。考えるべき事(私は何の場合は、GNUツールチェーンを使用するか、またはそれから得られると仮定します - 私はちょうどものがあるか知りませんません)あなたはこれを行うことができますローダーを

    • を持っているのですか?テンプレートシンボルは特殊な方法(弱い)で扱われるべきですが、いくつかのdylds(動的ライブラリ)を使用する場合にのみ気になります。ローダーは、グローバルコンストラクターとデストラクタを呼び出すことができるはずです。例外の巻き戻し情報のロードもそれによって処理される必要があります。見ているポイントは次のとおりです。https://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-PDA/LSB-PDA/ehframechpt.html
    • C++ランタイムが必要です。私。言語の基本サポートと同じように、私はここで一見することをお勧めします:https://github.com/gcc-mirror/gcc/tree/master/libstdc++-v3/libsupc++ これは、malloc/free関数を動作させることを意味します。
    • あなたのプログラムがスレッド、TLS(スレッドローカルストレージ、thread_local C++キーワード)、ファイル処理と例外を使用する場合、複雑さが急激に増加します...そして、あなたにstdlibC++のフルバージョンの移植または使用を歓迎したいと思います(g ++)またはlibC++(clang)
    • glibcまたはそのような微小置換のいずれかが必要なことを考えると、https://www.uclibc.org/のようになります。標準的ではない置換を使用する場合は、上記のC++ライブラリとどのように結合するか考える価値はあります(stdlibC++やlibC++など、理論上使用できるもの)

    私は自分の小さな裸の腕のプロジェクトのために、C++をあまりにも多く、ForceはC言語になっています。

    1

    あなたのライブラリに依存しますが、組み込みプラットフォームでは、通常、rttiと例外処理は無効になります。 C++は通常メモリアロケータを必要とし、通常mallocの観点から実装されています。それが他のものであれば、あなたはデフォルトのオーバーレーターnewとoperator deleteの実装を提供するでしょう。コンパイラは残りの部分を処理します。

    関連する問題