2

arm-gcc 用のクロス コンパイル ツールチェーンを作成し、arm-elf ターゲット用に binutils、newlib、gcc、および gdb を構成しました。私が抱えている問題は、Mac で arm-elf-gcc を使用してプログラムをコンパイルすると、32 ビットの実行可能ファイルが生成され、64 ビット環境では実行できないことです。

これを回避する最も簡単な方法は何ですか? 32 ビットの実行可能ファイルを arm 環境に配置することはできますが、Mac でファイルを何らかの方法で実行できるかどうか知りたいですか?

- 追加した -

以前にこれを行うべきでしたが、プログラムのターゲットがBeagleboardであることをお知らせします。Mac OS X で arm-gcc を使用してオブジェクトをコンパイルおよび生成し、*.o を出力を表示する Beagleboard。残念ながら、./hello.o を実行すると、Beagleboard でも同じエラーが発生します。

ありがとう、
サヤン

4

2 に答える 2

4

Mac で実行可能ファイルを実行できない問題がいくつかあります。

1) アーキテクチャ。あなたの Mac はおそらく x86/x86_64 マシン (または PowerPC) ですが、バイナリは ARM アーキテクチャ用にコンパイルされています (これがクロスコンパイラを使用するポイントです)。これらの命令セットには互換性がありません。

2) バイナリは ELF オブジェクト ファイルとしてリンクされますが、Mac では Mach-O オブジェクト ファイル形式が使用されます。お使いの OS は、この実行形式を読み込めません。

3) 実行可能ファイルは、Mac OS libc ではなく、newlib (おそらく Mac OS ではないターゲット用) に対してリンクされています。システム コールは、このプラットフォームでは正しくありません。

プログラムが標準の UNIX 実行可能ファイルの場合、標準システムの gcc でコンパイルするだけで実行できます。それ以外の場合は、ARM エミュレーターで実行できますが、セットアップがかなり複雑になる場合があります。

于 2010-09-15T08:24:38.720 に答える
1

32 ビットであるという事実は関係ありません。Mac で ARM コードを実行することはできません (何らかの種類の ARM エミュレーターが見つからない限り)。

于 2010-09-15T08:12:08.553 に答える