PHPコンパイル - ライブラリリンク

PHPコンパイル - ライブラリリンク

私のサーバーで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/localconfigure

(また、PHP 5.3.13はもはや最新バージョンではないため、現在の最新バージョンである5.3.21を使用することをお勧めします。)

関連情報