0

単純な hello world プログラムのアセンブリ言語リストを生成しようとしています

走ったgcc -S file.c

ファイルを生成しました。

生成された .s ファイルを使用して以下のスクリプトを使用しています。

#!/bin/bash -x

NAME=file1

for i in *.s; do
        as -o ${i%.s}.o $i
done
ld -static -o $NAME *.o
objdump -D $NAME

これを使用すると、エラーが発生します。

In function `main':
(.text+0x16): undefined reference to `printf'

どんな助けでも大歓迎です。

4

1 に答える 1

1

でコンパイルしますgcc -fverbose-asm -S -Wall(およびおそらく-Oまたはも-O2

-fverbose-asm、アセンブラでいくつかの役立つコメントを生成します。

gcc -vプログラムがどのようにリンクされているかを理解するために使用します。起動コード (いくつかのなど) が必要で、少なくともまたはcrt0.oをリンクする必要があります。libc.so.6libc.a

gcc -v中間ステップでのコンパイルとリンク、および暗黙的なオブジェクト ファイルとライブラリが表示されます。(適切なコンパイラ)および(アセンブラ)およびリンカgccなどの他のプログラムを開始しているだけです。時には一種のリンカーです。cc1asldcollect2

ところで、いくつかのアセンブリ コードを記述して、それを使用することができますgcc。たとえば、アセンブリで 1 つのルーチンだけをコーディングし、残りを C でコーディングします。次に、実行します。gcc -v -Wall routine.s main.c -o prog

Linux Assembly HowToもお読みください。

于 2013-05-30T04:50:22.123 に答える