2012-02-22 49 views
1

CodeBench G ++ Liteツールを使用してSTM32チップ用のコードをコンパイルしようとしています。ただし、エラーが発生します。__libc_init_arrayへの未定義の参照

startup.o: In function `LoopFillZerobss': 
(.text.Reset_Handler+0x2a): undefined reference to `__libc_init_array' 

私はGoogleで検索して、libc_init_arrayはおそらくいくつかの標準のgccライブラリの一部である...しかし、私はこのエラーを修正する方法がわからないように見えますか?

Iはまた、この

arm-none-eabi-ld: cannot find libc.a 

として、同様のlibgcc.aおよび

+0

コンパイラのインストールを確認し、 "-v"オプションを追加してライブラリパスを確認し、必要なライブラリがあることを確認してください。 –

答えて

1

機能__libc_init_arrayが「起動」コードのCodeSourcery社の「CS3」機構の一部であるlibm.aをエラーを有していますmainが実行される前にすべてのプログラムの静的初期化が行われることを保証します。

すべてのライブラリが見つかるようにしてください。それはすべての問題を解決するのに十分かもしれません。

g ++はarm-none-eabi-ldにいくつかの重要なパラメータを正しく渡す必要があるため、arm-none-eabi-g ++を直接使用しないでください。場合によっては、正しいライブラリを見つけてリンクするために必要なこともあります。

コマンドラインでビルドする方法がわからない場合や、arm-none-eabi-g ++が欠けているライブラリを解決するために何もしていない場合は、LeafLabs Webサイトを参照してくださいどのように彼らは、これらのプラットフォームのそれぞれの作業GCCベースのツールチェーンを含むWindows、Linux、およびMac用に構築されたSTM32のための無料、オープンソース、IDEを、提供し、十分なMakefileを http://leaflabs.com/docs/unix-toolchain.html

を使用してコマンドラインからビルド起動するライブラリの数http://leaflabs.com/docs/maple-ide-install.html

実際のビルドにツールチェーンを使用することを望む場合でも、そのツールチェーンを使用する価値があります。 Makefilesは、あなたのプログラムを構築するために使用しているプロセスを健全にチェックします。

私はLeafLabsのスタッフではなく、私はいくつかの製品を購入していて、彼らのフォーラムで質問に答えようとしている以外は会社と関係がありません。