質問
私は、アセンブリファイルとファイル(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()の関数であるという保証を行っていないことを指摘しなければなりません
所属していません StackOverflow