私のサーバーでPHP 5.3.13をコンパイルしています。 autonome php5フォルダを作成したいです。したがって、プレフィックスは次のようになります。
/usr/local/php5
このフォルダには、PHPを実行するために必要なすべてのlibを格納するlibフォルダがあります。たとえば、次のようになります。
libk5crypto.so.3
libxml2.so.2
libjpeg.so.62 ....
.phpでコンパイルしても、--with-jpeg-dir=/usr/local/php5/lib/
PHPバイナリはまだ探しています/usr/lib64
。
これまでに見つけた唯一の解決策は、手動でエクスポートすることです。LD_LIBRARY_PATH=/usr/local/php5/lib
コンパイル時にも同じことが自動的に発生したいと思います。それは可能ですか?
答え1
リンカーパスには2つあります。編む時間、そして走る時間。
私はautoconf(configure
)が代替ライブラリの場所を使用して正しい操作を実行するように設定されることがほとんどないことを発見しました。--with-something=
通常、次を使用します。いいえ正しいリンカーフラグ(-R
または-Wl,-rpath
)を生成してください。ライブラリのみが.a
機能しますが、.so
ライブラリの場合は指定する必要がありますRPATH
。
export PHP_RPATHS=/usr/local/php5/lib
./configure [options as required]
(多くの場合、単にコマンドLDFLAGS
に追加する方法を使用しますが、PHPのビルドプロセスは少し異なります。)configure
LD_LIBRARY_PATH
これは、これらのパスがデフォルトのリンカ設定()/etc/ld.so.conf
で指定されているように、各バイナリに追加のリンカ検索パスを効果的に追加します。また、コンパイル時間とランタイムが同じディレクトリのライブラリを使用するように追加の-L/usr/local/php5/lib
操作も処理しますLDFLAGS
(他の場所のバージョンが一致しない場合は問題が発生する可能性がありますが、ここでは心配する必要はありません)。
ビルドが完了したら、次のことを確認できます。
$ objdump -j dynamic -x ./sapi/cli/php | grep RPATH
RPATH /usr/local/php5/lib
$ objdump -j dynamic -x ./libs/libphp5.so | fgrep RPATH
RPATH /usr/local/php5/lib
実行すると、ldd
どのライブラリがどこからロードされているかが確認されます。
実際に使用する必要があるのは、コンパイラ/リンカーが要求するように追加されたいくつかの最上位ディレクトリ、ディレクトリ、およびその他のディレクトリを--with-jpeg-dir
指すことです。/usr/local/
include/
lib/
インストールが見つからない--with-jpeg-dir
場合にのみ、設定は自動的に別の(プラットフォーム別)「標準」の場所でそれを見つけます。あなたの場合は、libjpegが標準の場所にあり、ディレクティブが自動的に無視されると思います。configure
/usr/local
configure
(また、PHP 5.3.13はもはや最新バージョンではないため、現在の最新バージョンである5.3.21を使用することをお勧めします。)