2017-02-23 7 views
2

ここで少し問題があります。私はワークステーションでうまく動作する私のマシン上のZephirプラグインのサンプルをコンパイルしましたが、私がそれを移動すると例えます。本番サーバーに、私はこの奇妙なPHPのエラーが表示されます。動的拡張(無効なELFヘッダー)を読み込めません。[PHP + Zephir]

PHP Startup: Unable to load dynamic library '/mod/utils.so' - /mod/utils.so: invalid ELF header in Unknown on line 0

ファイルがディレクトリのPHPに存在しない場合ので、パスが細かいことは、ファイルが見つからないというエラーがスローされます。

Googleは何も教えてくれませんでした。誰もこの種の問題に遭遇したことのないようです。何か案は?

+0

マシン**は**同一ですか**ですか?運用サーバーでコンパイルを試しましたか? – MonkeyZeus

+0

異なるマシン、ワークステーション上のmacOS、実動サーバー上のCentOS –

+0

クール、http://stackoverflow.com/a/42417181/2191572の回答を参照してください。ただし、実稼働環境と同じマシンを設定する部分は無視してください。 – MonkeyZeus

答えて

1

"無効なELFヘッダー"は、自己コンパイルされた共有ライブラリが運用サーバー上のシステムと互換性がないことを意味します。ここでは、ご使用のワークステーションと本番環境の詳細/相違点を知ることは素晴らしいことです。これは、ワークステーション用のワークステーションでlibがコンパイルされているためです。実稼働サーバーでのコンパイルはまったくのアイディアです。プリコンパイルされたライブラリーを入手してそこにインストールするか、見つからない場合は、実動マシンと同じ環境でライブラリーをコンパイルし、後でインストールしてください生産機械。希望が役立ちます。

+0

お返事ありがとうございます。実動サーバーでコンパイルするのは私の心の中にありましたが、これを行うのはちょっとばかげた方法です。私はiMac(osx sierra 10.12.3)を使って、プロダクションサーバーでCentOSを揺らしています。いくつかの迷惑メール環境でコンパイルされたPHP拡張モジュールを実行しようとしましたが、すべて同じエラーで失敗しました。 –

+0

macOSはABI/syscallの非互換性はもちろんのこと、全く異なる実行可能形式を使用します。 MacでビルドしてLinuxで動かしたいのであれば、クロスコンパイルが必要になります。 – Siguza

関連する問題