こんにちは、単純な hello world C プログラムを作成し、次のようにコンパイルしています。
gcc -c hello.c
ld hello.o -lc -o out
ld から警告が表示されます:ld : _start not found defaulting to ....
実行しましたが、出力にルーチンがobjdump -D hello.o
見つかりません。
ここで何が欠けていますか?_start
: 、、crt*
とリンクした場合に表示されるものを見逃しています。がどのように呼び出されるかを見て( で表示されます)、 に対して同じオプションを使用します。gcc -v
crt1.o
crtend.o
crtn.o
gcc
collect2
gcc -v
ld
main
function は実行可能なエントリ ポイントではありません: 標準ライブラリの一部の初期化が前に行われますmain
(それ以外の方法で行うのは不可能または非論理的であるため)。_start
デフォルトでは実際のエントリ ポイントは、crt1.o
常に実行可能ファイルにリンクされています。
メイン関数がないため、試すこともできます
gcc -v hello.c -o hello
正常にコンパイルされるかどうかを確認します。