2012-03-09 21 views
3

私はGCCツールチェーンのYagarto再コンパイルを使用しています。/YAGARTO/binに/../ libに/ gccを:私は、エラーメッセージにARMプロセッサの基本Cファイルのコンパイル

Cをgetコマンドarm-none-eabi-gcc main.cを入力するとき

int main(void) 
{ 
    return(0); 
} 

:私は.elf実行ファイルを取得するには、この簡単なプログラムをコンパイルしようとしています/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib\libc.a(lib_a-exit.o): 関数内exit': C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\stdlib/../../../../../newlib-1.19.0/newlib/libc/stdlib/exit.c:65: undefined reference to _exit 'collect2: ldは私が間違って何をやっている

1つの終了ステータスが返さ?

+1

ビルド環境で使用できるARM標準のCライブラリがありますか?リンカーが「いいえ」と言っているからです。 – tbert

+0

私はそうではないようです。ビルド環境でARM標準のCライブラリを入手するにはどうすればよいですか? – Randomblue

+0

常に最も一般的なライブラリがツールチェーン自体に含まれています。ライブラリパスを正しく設定しないか、明示的にライブラリにリンクする必要があります。 – theB

答えて

6

NEWLIBが_exitシンボルを定義する必要があります。また、あなたがnewlibの仕事をするために提供しなければならない他のシンボルがあるかもしれません。このようなhttp://sourceware.org/newlib/libc.html#Stubs

何かが(あなたはOSを持っていたときにこれをしない、あなたは、マイクロコントローラ用にコンパイルされていると仮定して)十分なものでなければならない。

.globl _exit 
_exit: 
    b  . // Loop until reset 

またはCで :ところで

void _exit(void) { 
    while(1) { 
     // Loop until reset 
    } 
} 

:あなたは、紡糸前に割り込みを無効にすることができます。

EDIT:多分litte bitの追加情報。 YAGARTOはしかし、それは(printf関数の場合)画面やコンソールに文字を送信する方法を知ることができない、またはあなたがabort()を呼び出す場合をで終了する方法などprintf()malloc()、などの機能を提供するライブラリである、libcのようNEWLIBを含みまたはexit()。そのため、Newlibでは、使用するNewlibの機能に応じて、いくつかの基本機能の実装を提供する必要があります。

0

それはあなたが簡単な答えはありませんなど、あなたが使っているものツールチェーン、あなたがコンパイルしているもののプラットフォーム上で実行しているものをプラットフォームに非常依存します。

CodeSourcery(現在メンター)は、まともなターンキークロスコンパイル環境を提供しています。これはgccとglibcだけがあなたのプラットフォーム用にコンパイルされたものですが、簡単にセットアップしたい場合は、メンター・グラフィックスは、CodeSourcery社を買ったとき

http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/

は、残念ながら、彼らはそれがために使用よりも実質的に困難ダウンロード手順を行い、そして今、あなただけの何かをダウンロードするのではなく、電子メールによってあなたに送られたリンクを登録して取得する必要がありますが、私まだgccのツールチェインを入手する悪い方法を見つけることはできません。 (提案が欲しかった...)

+0

おそらくhttps://launchpad.net/gcc-arm-embeddedをチェックしてください – kwesolowski

関連する問題