web-dev-qa-db-ja.com

Atollic TrueSTUDIO:CからC ++に変換する方法は?

TrueSTUDIO forSTM32でプロジェクトをC++に変換しようとしています

  • プロジェクトの選択([C/C++プロジェクト]タブ)
  • マウスの右ボタンで、[新規]/[その他]を選択します
  • [C/C++]タブで、[C/C++プロジェクトに変換](C/C++の性質を追加)
  • [次へ]を押しても何も起こりません(理由は不明です)
  • もう一度[次へ]を押すと、次のように表示されます。C/ C++プロジェクトへの変換:ウィザードは、選択したプロジェクトにC/C++ Natureを追加して、C/C++ツールサポートを有効にします。
  • [完了]を押します

Main.cをmain.cppに変更すると、ビルド後に次のエラーが発生します。

startup\startup_stm32f407xx.o: In function `LoopFillZerobss':
C:\Users\Michel\OneDrive\Stm32\Stm32CubeProjects\Fcb1010\Debug/..\startup/startup_stm32f407xx.s:115: undefined reference to `main'
collect2.exe: error: ld returned 1 exit status

まだCが使用されているようです(コマンドライン(最初の部分)でも):

arm-atollic-eabi-gcc -o Fcb1010.elf Drivers\STM32F4xx_HAL_Driver\Src\stm32f4xx_hal.o Drivers\STM ...

G ++が使われることを期待しています。

CubeMXで生成されたプロジェクトのTrueSTUDIO内でC++を使用できるように設定/手順を変更するにはどうすればよいですか?

[〜#〜] update [〜#〜]

Atollic TrueStudioを削除し、AC6 System Workbenchを削除して、AC6 SystemWorkbenchを再インストールしました。これで、STLを使用していても、AC6 SystemWorkbenchでC++を使用できます。

Atollic TrueStudioを再度インストールすることはあえてしません。これは、おそらく両方ともEclipseを使用しているため、AC6SystemWorkbenchの既存のインストールが壊れてしまうためです。 TrueStudioのいくつかの機能が気に入ったので残念ですが、C++の方が重要です。だから私にとって、TrueStudioはもうありません。

10
Michel Keijzers

あなたが言及したエラー

startup\startup_stm32f407xx.o:関数 'LoopF​​illZerobss'内:C:\ Users\Michel\OneDrive\Stm32\Stm32CubeProjects\Fcb1010\Debug/..\startup/startup_stm32f407xx.s:115: `main'collect2.exeへの未定義の参照:エラー:ldが1つの終了ステータスを返しました

リンカの問題です。ライブラリがcmain関数を探しているのではないかと思います。 C++コンパイラは名前マングリングを実行するため、シンボルはmainではなくなります。

mainの署名をextern "C" int main(void)に変更してみてください

3
Colin

以下の手順に従ってください:-

  1. すべての.cファイルを手動で.cppに変換することをお勧めします
  2. 各ヘッダーファイルを確認し、C言語に固有のマクロを変更します
  3. main関数をCタイプからC++に変更します(voidmainからintmain())も、main関数から値を返します。
  4. Makeファイルを使用している場合は、特定のC依存関係が参照されているかどうかを確認し、それらを変更します。

これがお役に立てば幸いです。