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 ....