9
は
はハローワールドCプログラムを考えてみましょう:gccがデフォルトでldに渡すコマンドラインオプションを特定する方法は?
のhello.c:
#include "stdio.h"
int main()
{
printf("Hello, World!\n");
}
私が呼び出す場合:
$ gcc -c hello.c -o hello.o
それは、hello.o
ELF再配置可能ファイルを生成します次に、電話する場合:
それは私がLDの代わりに[1]
の直接[2]
呼び出す場合は
ハローLDとhello.oリンクし、ELF実行可能ファイルを生成します。
$ ld hello.o -o hello [2]
を、私はこれらのエラーを取得:
/usr/bin/ld.bfd.real: warning: cannot find entry symbol _start
test.c:(.text+0xa): undefined reference to `puts'
gcc must ldに他のオプションを渡してください(例えば、Cライブラリをリンクするため)。
コマンドラインgccがコマンド[1]
でldに渡っているものを正確に判断する方法はありますか?
私のUbuntu 12.10 64の箱のようです。 'collect2'は' ld'の単純なエイリアスではありません。 'collect2'は実行可能ファイルですが、' ld'はperlスクリプトである 'hardened-ld'へのシンボリックリンクである' ld.bfd'へのシンボリックリンクです。何が起こっているのか分かりません。 –
申し訳ありませんが、私はリテラルエイリアスを意味しません。代わりに 'ld'で同じコマンドを実行すると、同じように動作します。 Docs:http://gcc.gnu.org/onlinedocs/gcc-4.3.5/gccint/Collect2.html –
'collect2'と' ld'の違いは何ですか? gccintを読んだ後、簡単に理解できませんでした。 –