home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2010/01/03/ldオプションの--start-group,--end-group

日記/2010/01/03/ldオプションの--start-group,--end-group

日記 / 2010 / 01 / 03 / ldオプションの--start-group,--end-group
id: 534 所有者: msakamoto-sf    作成日: 2010-01-03 21:31:36
カテゴリ: C言語 

が何なのか不思議だったのですが、ちょっと調べたらinfoにも載ってるしmanにも出てた。

http://www.jp.freebsd.org/cgi/mroff.cgi?sect=1&cmd=&lc=1&subdir=man&dir=jpman-6.0.0/man&man=ld
上はFreeBSD 6.0のmanページなんですが、CentOS5.2のldのmanページには出てなかったんですよね・・・。
NetBSD1.6/CentOS5.2では共にldのinfoページに出てました。

仕組みとしては上記manページの次の一文が端的に表していると思います。

アーカイブをグループ化すると、すべての可能な参照が解決されるま で、
それらのすべてのアーカイブは繰返し検索されます。

とりあえずこれで、staticリンクしようとした時のldのオプションは分かりました。

$ gcc -Wall -static -v -o hello_static hello.c
...
/usr/libexec/gcc/i386-redhat-linux/4.1.2/collect2
 -m elf_i386
 --hash-style=gnu
 -static
 -o hello_static
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o
 /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbeginT.o
 -L/usr/lib/gcc/i386-redhat-linux/4.1.2
 -L/usr/lib/gcc/i386-redhat-linux/4.1.2
 -L/usr/lib/gcc/i386-redhat-linux/4.1.2/../../..
 /tmp/ccMRvVHp.o
 --start-group
  -lgcc
  -lgcc_eh
  -lc
 --end-group
 /usr/lib/gcc/i386-redhat-linux/4.1.2/crtend.o
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crtn.o

あとは普通にダイナミックリンクでコンパイルした時の"--as-needed", "--no-as-needed"をまた後日調べてみたいですね・・・。".dynamic"セクションのDT_NEEDEDと関連するところまでは分かったのですが、具体的な部分がまだ理解し切れてない。

$ gcc -Wall -v -o hello hello.c
...
/usr/libexec/gcc/i386-redhat-linux/4.1.2/collect2 
 --eh-frame-hdr
 -m elf_i386
 --hash-style=gnu
 -dynamic-linker /lib/ld-linux.so.2
 -o hello
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crti.o
 /usr/lib/gcc/i386-redhat-linux/4.1.2/crtbegin.o
 -L/usr/lib/gcc/i386-redhat-linux/4.1.2
 -L/usr/lib/gcc/i386-redhat-linux/4.1.2
 -L/usr/lib/gcc/i386-redhat-linux/4.1.2/../../..
 /tmp/ccPygftP.o
 -lgcc
 --as-needed -lgcc_s --no-as-needed
 -lc
 -lgcc
 --as-needed -lgcc_s --no-as-needed
 /usr/lib/gcc/i386-redhat-linux/4.1.2/crtend.o
 /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crtn.o

プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2010-01-03 21:39:41
md5:1c12c29e0ab2e7b06ce433eca2df2253
sha1:3ada6fe209bb0db9682811c5b1666c1f5b16746c
コメント
コメントを投稿するにはログインして下さい。