Hello,
私はS32K344マイクロコントローラに取り組んでおり、C ++コードを実行する必要があります。C ++がSDKプロジェクトで公式にサポートされていないことがわかった後、nxpコミュニティページで説明されている回避策のいくつかを実装しようとしました。
要するに、SDKを使用してCプロジェクトを作成し、C ++の性質を追加し、main.cの名前をmain.cppに変更し、標準リンカファイルをプロジェクト設定のプロジェクトで作成されたリンカファイルに変更します(画像を参照)。
この手順の後、私はmain.cppでプロジェクトを構築することができます。ただし、main の外部で宣言されたオブジェクトは実行または初期化されません。
この問題に対して私が見つけた解決策の1つは、main()の先頭に__libc_init_array()を含めることです。ここでの問題は、この機能が見つからないことです。この依存関係を解決するためにライブラリを追加するにはどうすればよいですか?C ++でmainの外部オブジェクトを初期化する他の解決策はありますか?コンソール出力:
ビルドファイル: ../RTD/src/Clock_Ip_ExtOsc.c
起動:標準S32DS Cコンパイラ
arm-none-eabi-gcc "@RTD/src/Adc_Sar_Ip.args" -MMD -MP -MF "RTD/src/Clock_Ip_ExtOsc.d"-MT「RTD/src/Clock_Ip_ExtOsc.o」-o "RTD/src/Clock_Ip_ExtOsc.o""../RTD/src/Clock_Ip_ExtOsc.c"
../src/main.cpp:関数 'int main()'では、次のようになります。
../src/main.cpp:59:2: エラー: '__libc_init_array' はこのスコープで宣言されていませんでした
59 |__libc_init_array();
|^~~~~~~~~~~~~~~~~
make: *** [src/subdir.mk:20:src/main.o]エラー 1
make: *** 未完成の仕事を待っています...。
Hi,
_libc_init_array STD C ライブラリの一部です (例: libc_nano.a)。C++ を使用している場合は、リンク、STD、C ライブラリ、および呼び出し_libc_init_arrayは必要ありません。