opensslコマンドが -lcrypto.0.9.8 を見つけられない▼
% ldd /usr/ssl/bin/openssl
/usr/ssl/bin/openssl:
-lcrypto.0.9.8 => not found
-lssl.0.9.8 => /usr/ssl/lib/libssl.so.0.9.8
-lcrypto.0.9.8 => /usr/ssl/lib/libcrypto.so.0.9.8
-lc.12 => /usr/lib/libc.so.12
$Id$
すべての環境やOSで起きるわけではありません。 (NetBSD-1.6では起きます)
上記問題が出る環境では、ldd libssl.so すると同じエラーが出ます。
$ ldd /usr/ssl/lib/libssl.so
/usr/ssl/lib/libssl.so:
-lcrypto.0.9.8 => not found
共有ライブラリに対しても RPATH を埋め込むよう、Makefileにパッチをあてます。
openssl-0.9.8za-rpath.patch: If you do not want the patch, build with `make SHARED_LDFLAGS=-Wl,-rpath,/usr/ssl/lib` diff -6 -ur openssl-0.9.8b-orig/Makefile.shared openssl-0.9.8b/Makefile.shared --- openssl-0.9.8b-orig/Makefile.shared Sat Dec 17 05:52:38 2005 +++ openssl-0.9.8b/Makefile.shared Thu Aug 31 17:25:14 2006 @@ -148,13 +148,13 @@ DO_GNU_SO=$(CALC_VERSIONS); \ SHLIB=lib$(LIBNAME).so; \ SHLIB_SUFFIX=; \ ALLSYMSFLAGS='-Wl,--whole-archive'; \ NOALLSYMSFLAGS='-Wl,--no-whole-archive'; \ - SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX" + SHAREDFLAGS="$(CFLAGS) $(SHARED_LDFLAGS) -shared -Wl,-Bsymbolic -Wl,-soname=$$SHLIB$$SHLIB_SOVER$$SHLIB_SUFFIX -Wl,-rpath,$(LIBRPATH)" DO_GNU_APP=LDFLAGS="$(CFLAGS) -Wl,-rpath,$(LIBRPATH)" #This is rather special. It's a special target with which one can link #applications without bothering with any features that have anything to #do with shared libraries, for example when linking against static
当パッチは OpenSSL 開発陣にも 送りましたが、 「共有ライブラリにRPATHを設定するのはオプション機能であるべき」 との理由で却下されました。
OSによって違う のですが、 GNU binutils なら objdump -p ファイル | grep RPATH で拾えます。
% objdump -p /usr/ssl/sbin/sshd
/usr/ssl/sbin/sshd: file format elf32-i386
Program Header:
PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2
filesz 0x000000c0 memsz 0x000000c0 flags r-x
...
Dynamic Section:
NEEDED libcrypt.so.0
NEEDED libcrypto.so.0.9.8
NEEDED libutil.so.6
NEEDED libz.so.0
NEEDED libc.so.12
RPATH /usr/ssl/lib これ
INIT 0x804af8c
FINI 0x8076554
....