2011-11-28 32 views
7

x86アーキテクチャでgccを使用してa.outファイル形式を生成するにはどうすればよいですか?私は、例えば、-fフラグで簡単にこれを行うことができますNASMでgccでa.outファイル形式を生成

:Linux上で

[[email protected]]$ nasm -f aout start.asm 
[[email protected]]$ objdump -a start.o 

start.o:  file format a.out-i386-linux 
start.o 

[[email protected]]$ 

、.cファイルをコンパイルすると、エルフのオブジェクトを生成します。 gccでa.outファイルを作成するにはどうしたらいいですか?

+0

どのシステムをお使いですか?私はLinuxがa.out実行ファイルをもうサポートしているとは思わない。中間オブジェクトファイルについてはわかりません。 –

+0

私はカーネルをa.outサポートで設定できると信じていますが、デフォルトではオフになっています。もはやカーネルをコンパイルしてからしばらく経っています。 – goldfire

+0

コンパイル時に 'CONFIG_BINFMT_AOUT'が有効になっていると、Linuxはそれをサポートしています。 –

答えて

11

gccを使用してa.out形式を生成するには、リンカーに指示する必要があります。あなたは-Wlフラグのおかげでgccからフラグを渡すことでそれを行うことができます。ここで

を使用すると、a.outのフォーマットのためにどうなるのかです:

gcc -Wl,--oformat=a.out-i386-linux file.c -o file.out 

あなたはまた、次のように入力してサポートするすべての形式を表示することができます。

objdump -i 
+0

問題は、私は多くのオブジェクトファイル(.o)をelf形式にしているので、OUTPUT_FORMAT(a.out-i386-linux)とリンクすると、リンカスクリプトのパラメータ がこのエラーになります。 a.outオブジェクトファイル形式のセクション '.comment 'を表します。これが私が "gcc -c file.c"を最初からa.out形式にコンパイルしELFではなくコンパイルする必要がある理由です。 – Nulik

+0

-fno-identオプションの.commentセクションが生成されなかったため、上記の解決策が見つかりました。grubを使用してa.outカーネルを正常に起動しました。ありがとう – Nulik

+0

私はあなたの最初のコメントを忘れて、あなた自身が修正プログラムを見つけたことを嬉しく思います:) –

0

この質問には2つの回答があります。 1つは、ターゲットとしてaoutを使って新鮮なGCCをコンパイルする必要があることです。コマンドラインスイッチを反転するほど簡単ではありません。もう一つの答えは質問です。なぜ実際にこれが必要ですか?私はすぐに正当な理由を考えることができません。

+1

私はオペレーティングシステムを開発しています。カーネルとアプリケーションを1つのイメージファイルにまとめて1つの読み込みと1つの書き込み(イメージ全体)ですばやく読み込まれるようにする必要があります.a.outはこれに最適なフォーマットです。シンプルで多くのブートローダがサポートしています。 – Nulik

関連する問題