1

さて、私はまだ解決されていないPILの以前の問題を抱えていました。他の誰かがこの問題を抱えていて、古いJPEGライブラリを削除することで成功しました。私のマシンでは実際にはできませんが、RHELであり、libjpegとlibjpeg-develに依存しているものがたくさんあります(yum remove libjpegを見てみたところ、合計252個のパッケージがありました。削除されました!)

/ usr / local/libにjpeg-8をインストールしています。Pythonでは正しく使用されていますが、apacheでは使用されていません。lsofのリストは次のとおりです。

COMMAND     PID      USER   FD      TYPE             DEVICE     SIZE       NODE NAME
httpd     xxxxx      root  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0
python    xxxxx    jordan  DEL       REG              253,3             xxxxx63 /usr/local/lib/libjpeg.so.8.0.0
httpd     xxxxx    apache  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0
httpd     xxxxx    apache  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0
httpd     xxxxx    apache  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0
httpd     xxxxx    apache  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0
httpd     xxxxx    apache  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0
httpd     xxxxx    apache  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0
httpd     xxxxx    apache  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0
httpd     xxxxx    apache  mem       REG              253,3   xxxxx0    xxxxx34 /usr/lib64/libjpeg.so.62.0.0

だから、これが私が疑問に思っていることです。libjpeg-6bをアンインストールできないので、apacheに代わりにlibjpeg-8を使用させる方法はありますか?

さて、最近の実行でlsofは、apacheがlibjpeg.so.8.0.0ロードしているが、まだエラーが発生していることを示しています。これは、まだ62バージョンを使用していることを示しています。代わりに8バージョンを優先する方法はありますか?

更新#1

lddlib64 / modules内のすべてのモジュールに対して実行すると、libjpegへの参照がありませんでした。lddPILの_imaging.soファイルで実行すると、新しいバージョンのlibjpegを使用していることがわかりました。私のシステムにはPILのバージョンが1つしかないことは間違いありません。かなり徹底的な検索を行いました。

httpdまたはpythonに関連付けられているプログラムまたはモジュールがlibjpegをロードする可能性が高いことを知っている人はいますか?に表示されているので、apacheを介して何かがロードされていることを知っていlsofます。

4

1 に答える 1

1

方法はありますが、jpegライブラリのバージョンが異なるため、最初に古いライブラリをロードしようとしているものが何であれ、壊れてしまう可能性があります。

問題は、同じApacheインストールにPHPをロードしていて、古いバージョンのjpegライブラリに依存しているPHP拡張モジュールをプリロードしていることである可能性があります。PHPはPythonが行うことよりも優先されているため、間違ったライブラリで立ち往生しています。

したがって、mod_phpを無効にして、Apacheにロードされないようにしてください。あなたの問題が解決した場合、あなたはそれがそれであることを知っています。それが機能し、PHPが必要ない場合は、永続的に無効のままにしておきます。PHPが必要な場合は、代わりにfastcgiでPHPを使用するように変更してください。そうすれば、PHPがApacheプロセス自体にロードされるのを防ぐことができます。または、同じjpegバージョンを使用するには、PHPを更新/再構築する必要があります。

ここで、ハックが異なるバージョンのjpegライブラリをプリロードしますが、それは機能しないか、後で問題を引き起こす可能性があります。このハックは、Apacheのinitスクリプトを次のように変更することです。

LD_PRELOAD=/some/path/libjpeg.so.8.0.0
export LD_PRELOAD

これにより、オペレーティングシステムは、何かを実行する前に、そのライブラリをプロセスアドレス空間にプリロードするように指示されます。

ところで、PHPの場合、lddで見つからないのは、PHP拡張モジュールがApacheモジュールとは別のディレクトリにインストールされているためです。

于 2010-02-02T23:21:28.090 に答える