蝉は、やがて死ぬる午後に気づいた。ああ、私たち、もっと仕合せになってよかったのだ。:2008年03月30日分

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日本語訳(ちと古い)