プロが教えるわが家の防犯対策術!

以下のアセンプルコード(examgdb.s)をiMacのgccで、

>gcc -m32 examgdb.s

でコンパイルすると以下のようなエラ〜が出ます。

Undefined symbols for architecture i386:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

何が悪いと言っているのでしょうか?
分かる方、直し方をご教示ください。

.file "examgdb.s"
.data
num: .long 0x6
string: .ascii "abcdef"
iarray: .word 0x1234, 0x5678, 0x9abc, 0xdef0, 0x1234, 0xffff
.text
.globl main
main:
movl $0, %esi
looptop:
movb string(%esi), %al
movw iarray( , %esi , 2 ), %dx
incl %esi
cmpl num, %esi
jb looptop
endloop:
ret

質問者からの補足コメント

  • clang: error: linker command failed with exit code 1 (use -v to see invocation)
    をgccコンパイルで消す方法とかあるのでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/01/31 20:08

A 回答 (2件)

そこにメッセージで出ているように


_main というシンボルが定義されていない
んじゃないかなぁ. リンカがどのように起動されているのかわからんけど.
この回答への補足あり
    • good
    • 0

それは「リンカがエラーを出した」って意味だから, あたりまえだけど


エラーなく正常に処理が終了する
ようにすればいい.

それをアセンブリレベルでやるなら ABI を確認しないとダメな気もする... けど, アセンブリでなんかしようとするならそのくらいは当然やっているはずなんだよなぁ.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!