会津大学学部8期生の村瀬です。

# FreeBSD-users-jp MLにメールを送ったのですが、
#  FreeBSD-users-jp メーリングリストのアーカイブ
#  http://home.jp.FreeBSD.org/mail-list/FreeBSD-users-jp/
# に反映されない&自分のメールアドレスに配送されない、という
# ことでニュースグループ fj.os.bsd.freebsd に投稿させていた
# だきました。

 libpng-1.2.7(http://www.libpng.org/pub/png/libpng.html)
をzlib-1.2.1(http://www.gzip.org/zlib/)とともに使おうと思
っているのですが、shared libraryに関して分からないことがある
ので質問させて下さい。よろしくお願いします。

 libpngを、scripts/makefile.freebsdを用いて
   % /usr/bin/make -f scripts/makefile.freebsd
を実行してビルドする(GNU makeではエラーが出ます)と
libpng.so.5という名前のshared libraryができますが、
   % ldd libpng.so.5
を実行すると
   libz.so.2 => /usr/lib/libz.so.2 (0x28141000)
のように、/usr/libに最初から存在するzlib(1.1.4相当)が使わ
れて(?)しまうが、これを
   … => /usr/local/zlib/lib/libz.so… (…)
あるいは
   … => /usr/local/lib/libz.so… (…)
となるようにするにはどうすればいいのでしょうか?それとも、そ
もそもshared library(ここではlibpng.so.5)に対するldd(1)の
出力ではshared library(ここではlibz.so*)のパスは気にしなく
てもよいのでしょうか?(ldd(1)の
   Contrary to nm(1), the list includes ``indirect''
   dependencies that are the result of needed shared
   objects which themselves depend on yet other shared
   objects.
という文(DESCRIPTIONの第1段落第2文)を見る限り、さすがに
気にしなくてもよいとは思えないのですが。。)
 一応、ld(1)の日本語マニュアル(4.7-RELEASEのものですが)を
読んでscripts/makefile.freebsdの
   LDADD+=         -lm -lz
に
   ・-L/usr/local/zlib/lib
   ・-R/usr/local/zlib/lib(-Wl,-rpath -Wl,/usr/local/zlib/lib)
   ・-Wl,-rpath-link -Wl,/usr/local/zlib/lib
を追加したりしたのですが、いずれもうまくいかないようです…。
# 最後の2つを追加するとlibpng.so.5の中身が変わり、stringsで
# 見ると「/usr/local/zlib/lib」が加わっていたりしますが、そ
# れでもldd(1)の結果は変わらないです。

 こちらの環境は以下の通りです:
   ・マシン機種:PC/AT互換機(CPU:Pentium(120MHz))
   ・OS:FreeBSD 4.8-RELEASE
   ・コンパイラ:gcc-2.95.4相当 (/usr/bin/cc)
   ・shared libraryの検索対象パス:
     /usr/lib
     /usr/lib/compat
     /usr/X11R6/lib
     /usr/local/lib
なお、「shared libraryの検索対象パス」は「% ldconfig -r」の
実行結果(search directoriesの部分)を最初から順番に列挙しまし
た。

 zlib-1.2.1ですが、これは/usr/local/zlibに以下のようにイン
ストールされております:
   include/zconf.h
           zlib.h
   lib/libz.a
       libz.so
       libz.so.1
       libz.so.1.2.1
 これのインストール方法は間違ってないと思います。OpenSSHでは
   % ldd /usr/local/OpenSSH/sbin/sshd
   /usr/local/OpenSSH/sbin/sshd:
   …
        libz.so => /usr/local/zlib/lib/libz.so (0x28198000)
   …
   % 
のようになっていて、これで実際にsshdが稼働してますので。
#  % ./configure … --with-zlib=/usr/local/zlib …
# を実行し、最後に
#  Linker flags: … -L/usr/local/zlib/lib -R/usr/local/zlib/lib 
# と表示されてます。
 また、現時点では /usr/local/{include,lib}/ にシンボリック
リンクを張ってはいません。


 よろしくお願いします。


---
村瀬紀彦 <s1080224@u-aizu.ac.jp>