を私は最後にしようとしているものです生成されたMakefileを編集する気にしません...
シェル変数と相対パスで設定できるかどうか不安です。 I doldd
はを$ORIGIN/../lib64
に展開します。この場合、ldconfig
〜を使用して、$ORIGIN/../lib64
をライブラリ検索パスに追加する必要があると思います。詳細については、サーバ障害に関するfinding ldd search pathを参照してください。
わからないので、とにかく指示を出します。 Makefileを変更する必要はありません。事実上、物事が上書きされてしまい、CFLAGS
やLDFLAGS
のようなものは無視されるので、私は過去に運がなかった。
また、Build OpenSSL with RPATH?を参照してください。あなたの質問と引用された質問は、同様の回答(それらの間に重複はありません)に収束する異なる質問です。しかし、RPATH上でOpenSSL開発者の立場を提供します。プライベートメールだったので、メッセージ全体ではなく関連する詳細を共有しました。
$ORIGIN/../lib64
をELFセクションに埋め込み、それが機能する場合は、報告してください。以下、自分のRPATHに/usr/local/ssl/lib
を使用しています。 /usr/local/ssl/lib
には$ORIGIN/../lib64
を代入する必要があります。
OpenSSLはBSDターゲット(ではなく、他)のために箱から出してRPATH
年代をサポートしています。設定から:
# Unlike other OSes (like Solaris, Linux, Tru64, IRIX) BSD run-time
# linkers (tested OpenBSD, NetBSD and FreeBSD) "demand" RPATH set on
# .so objects. Apparently application RPATH is not global and does
# not apply to .so linked with other .so. Problem manifests itself
# when libssl.so fails to load libcrypto.so. One can argue that we
# should engrave this into Makefile.shared rules or into BSD-* config
# lines above. Meanwhile let's try to be cautious and pass -rpath to
# linker only when --prefix is not /usr.
if ($target =~ /^BSD\-/)
{
$shared_ldflag.=" -Wl,-rpath,\$(LIBRPATH)" if ($prefix !~ m|^/usr[/]*$|);
}
のOpenSSL 1.0.2 のためにそれを行うための最も簡単な方法が表示されますadd it to linker flags during configuration
./config -Wl,-rpath=/usr/local/ssl/lib
あなたはまた、設定ラインとハードコードrpath
を編集することができなければ。たとえば、私はDebian x86_64で作業しています。だから私は、エディタでファイルを開いたConfigure
linux-x86_64-rpath
それを名付け、linux-x86_64
をコピーし、そして-rpath
オプション追加するには、以下の変更を加えた:
上記
"linux-x86_64-rpath", "gcc:-m64 -DL_ENDIAN -O3 -Wall -Wl,-rpath=/usr/local/ssl/lib::
-D_REENTRANT::-Wl,-rpath=/usr/local/ssl/lib -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:
${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
を、フィールド2と6が変更されました。 OpenSSLのビルドシステムでは$cflag
と$ldflag
に対応しています。
その後、新しい構成での設定:
$ ./Configure linux-x86_64-rpath shared no-ssl2 no-ssl3 no-comp \
--openssldir=/usr/local/ssl enable-ec_nistp_64_gcc_128
は最後に、make
後、立ち往生の設定を確認します。
$ readelf -d ./libssl.so | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
$ readelf -d ./libcrypto.so | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
$ readelf -d ./apps/openssl | grep -i rpath
0x000000000000000f (RPATH) Library rpath: [/usr/local/ssl/lib]
あなたがmake install
を実行すると、その後、ldd
が期待される結果を生成します:
$ ldd /usr/local/ssl/lib/libssl.so
linux-vdso.so.1 => (0x00007ffceff6c000)
libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007ff5eff96000)
...
$ ldd /usr/local/ssl/bin/openssl
linux-vdso.so.1 => (0x00007ffc30d3a000)
libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00007f9e8372e000)
libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007f9e832c0000)
...
これは問題ではありません。実行可能ファイルに書き込むために、literalの文字列 '$ ORIGIN /../ lib64'が必要です。どのような種類の置換もできません。 –
あなたが使っていたopensslのバージョンと、変更したMakefileの行を明確にしてください。 –
OpenSSLには 'Makefile.org'と再帰的なmakefileがあります。そして、彼らは 'CFLAGS'、' LDFLAGS'などを尊敬しません。* *あなたのmakefileで試してみてください。 – jww