libpng-1.2.7 (shared library) with zlib-1.2.1
会津大学学部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>
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735