質問

私は、アセンブリファイルとファイル(start.oとmain.oを)の.oするためにコンパイルされたCファイルを持っているとLDでそれらをリンクしようとしています。私は、このコマンドを使用しています:

ld -T link.ld -o kernel.bin start.o main.o

link.ldは、リンカスクリプトですが、私はそれを実行したとき、私はこのエラーを取得します:

start.o:start.o:(.text+0x2d): undefined reference to `_main'

アセンブリファイルで、私はこの機能を備えたCファイルを呼び出します:

stublet:
extern _main
call _main

jmp $

誰が悪いのかを見ることができますか?

役に立ちましたか?

解決

(Linux用のGCCなどの)いくつかのコンパイラは、Cライブラリの輸出にデフォルトで_を追加しないでください。実際の参照名を確認するためにnm main.oを試してみてください。むしろmainより_mainされる可能性があります。

他のヒント

いくつかのリンカーは、オブジェクトファイルやライブラリは、コマンドラインに表示される順序に敏感です - 。あなたの2つのオブジェクト・ファイルの順序を交換してみてください。

実際には、Cプログラムは、明示的にメイン呼び出すことが禁じられている。

-

私はまた、Cの標準は、main()の関数であるという保証を行っていないことを指摘しなければなりません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top