2008/03/30(Sun)
○ 今日
花見中止、しょぼーん。
○[NetBSD] shared library with -lc
ふむ、Linuxだと-shared付けても暗黙でlibcがリンクされるのね。
$ cd /usr/pkgsrc/wip/suse100_devel; make install
$ /usr/pkg/emul/bin/bash
bash-3.00$ ld -v
GNU ld version 2.16.91.0.2 20050720 (SuSE Linux)
bash-3.00$ gcc -shared -Wl,-soname,libfoo.so.0 -o libfoo.so.0.0 foo.c
bash-3.00$ ldd libfoo.so.0.0
libfoo.so.0.0:
libc.so.6 => /lib/libc.so.6 (0xbbad8000)
/lib/ld-linux.so.2 (0x00000000)
bash-3.00$ ln -sf libfoo.so.0.0 libfoo.so.0
bash-3.00$ ln -sf libfoo.so.0 libfoo.so
bash-3.00$ gcc -shared -Wl,-soname,libbar.so.0 -o libbar.so.0.0 bar.c
bash-3.00$ ldd libbar.so.0.0
libbar.so.0.0:
libc.so.6 => /lib/libc.so.6 (0xbbad8000)
/lib/ld-linux.so.2 (0x00000000)
bash-3.00$ ln -sf libbar.so.0.0 libbar.so.0
bash-3.00$ ln -sf libbar.so.0 libbar.so
bash-3.00$ gcc -Wl,-rpath,. -L. -lfoo -lbar test_foobar test_foobar.c
bash-3.00$ ldd test_foobar
libfoo.so.0 => ./libfoo.so.0 (0xbbbe6000)
libbar.so.0 => ./libfoo.so.0 (0xbbbe3000)
libc.so.6 => /lib/libc.so.6 (0xbbad8000)
/lib/ld-linux.so.2 (0x00000000)
ちゃんとプログラムのlibcのリンク順も最後になるみたい。
まあ問題のあるアプリのチェックにしか使えんけど
ちゃんとGNU ld(1)でlibcのリンク順を面倒見てくれるならそうした方がいい罠。
○ GNU ld
ldscriptなんて書いたことないのでちと勉強しよかな。
info日本語訳(ちと古い)