- PR -

opensshのconfigureでのエラーについて。

投稿者投稿内容
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2005-10-19 10:13
引用:

./config --prefix=/usr/local --openssldir=/usr/local/openssl
を指定したと思います。その後

cd /usr/local/ssl/lib/

cp libcrypto.a /usr/local/lib/
cp libcrypto.so.0.9.7 /usr/local/lib/
cp libssl.a /usr/local/lib/



./config のオプションに「shared」をつけていなければ libcrypto.so.0.9.7 や libssl.so.0.9.7 は作成されないはずですが・・・。

それはさておき、一番早い解決方法は OpenSSL や OpenSSH を利用する全てのユーザの環境変数に LD_LIBRARY_PATH を設定することです。

Bシェル系 :
LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH

Cシェル系 :
setenv LD_LIBRARY_PATH /usr/local/lib:LD_LIBRARY_PATH

とすることです。このようにすることで libgcc_s.so.1 に対するシンボルの解決ができると思います。ただし、前にも言ったとおり、gcc を移動したり削除したり LD_LIBRARY_PATH 環境変数を削除すると動かなくなってしまいます。

2番目の方法としては、この問題を回避するために libgcc_s.so.1 を静的にリンクします。

/usr/local/lib/gcc-lib/sparc-sun-solaris2.9/3.3.2/

に specs というファイルがあると思いますので、そのファイルの libgcc セクションの内容を以下のように編集します。

*libgcc:
%{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc:%{!shared:%{!shared-libgcc:-lgcc -l
gcc_eh}%{shared-libgcc:%{!m64:-L/usr/local/lib -R/usr/local/lib}%{m64:-L/usr/local/lib -R/usr/local/
lib} -lgcc_s%M -lgcc}}%{shared:%{shared-libgcc:%{!m64:-L/usr/local/lib -R/usr/local/lib}%{m64:-L/usr
/local/lib/sparcv9 -R/usr/local/lib/sparcv9} -lgcc_s%M}%{!shared-libgcc:-lgcc}}}}
(%{static ... -lgcc}}}} は1行で書いてください。改行が入ったらダメです)

このようにすることで、その gcc でコンパイルされた共有ライブラリが libgcc_s.so.1 に依存しなくなります。ldd の結果はこのように変わります。(libgcc_s.so.1 がありません)

$ ldd /usr/local/lib/libcrypto.so
libsocket.so.1 => /usr/lib/libsocket.so.1
libnsl.so.1 => /usr/lib/libnsl.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libc.so.1 => /usr/lib/libc.so.1
libmp.so.2 => /usr/lib/libmp.so.2
/usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1

3番目の方法は、OpenSSL をコンパイルするときに libgcc_s.so.1 に対するシンボルを解決してしまうことです。そのためには、OpenSSL を make する前に、環境変数 LD_RUN_PATH を設定します。

Bシェル系 :
LD_RUN_PATH=/usr/local/lib export LD_RUN_PATH

Cシェル系 :
setenv LD_RUN_PATH /usr/local/lib

その他の方法としては、OpenSSH を configure する前に、インストールした libcrypto.so と libssl.so を削除してしまうことです。こうすることによって、静的リンクが行われるため、libgcc_s.so.1 に対するシンボルを解決する必要がなくなります。


[ メッセージ編集済み 編集者: あんとれ 編集日時 2005-10-19 10:14 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-10-19 10:24
おはようございます。
libgcc のリンクトラブルであれば、openssl等のビルド時に、-static-libgcc オプションを CFLAGS かなにかで渡せば如何でしょうか??
※このオプションを知らなかった時は、わざわざ libgcc_s.so を隠して、強引に libgcc_s.a をリンクしていました… ( Solaris8 )。たまたま上手く行ったから良いようなものの、阿呆な事をしていたものです。

スキルアップ/キャリアアップ(JOB@IT)