it-swarm-ja.com

Automakeがクラッシュしたのは何ですか?

インターネットからオープンソースソフトウェア(この場合:PHP 5.5.5))をダウンロードする場合、ビルド用のAutomake「スクリプト」(スクリプトと呼べる場合)が付属していることがよくあります。ソース。

現在、別のアーキテクチャ用にクロスコンパイルしようとしていますが、別の./configure --switchを指定すると、別のエラーが発生し続けます。通常、このエラーは短い非説明的なメッセージであり、開発者以外にはまったく意味がありません。

「群れの構造体がLinuxで注文されているかどうか」を確認しています... configure:error:in `/usr/src/hd/lib/php-5.5.5':configure:error:クロスコンパイル中にテストプログラムを実行できません

に続く:

詳細については、 `config.log 'を参照してください。

だから私はタイプします:

cat ./config.log

しかし、実際には、それが私に示しているのは普通ではない唯一のことです:

構成:終了1

-

では、何が得られるのでしょうか?問題が何であるかをどのように知ることができますか?

参考までに、構成オプションは次のようになります。

./configure --prefix="`pwd`/install/" \
--build="i386-pc-linux-gnu" \
--Host="mips-linux-gnu" \
--target="mips-linux-gnu" \
--with-libxml-dir="/usr/src/hd/lib/libxml2-2.7.8/install/" \
--enable-soap \
CC="mips-linux-gnu-gcc" \
CFLAGS="-O2 -EL -march=74kf" \
CPP="mips-linux-gnu-cpp" \
CPPFLAGS="-I$CROSS_ROOTFS/include" \
CXX="mips-linux-gnu-g++" \
CXXFLAGS="-O2 -EL -march=74kf" \
CXXCPP="mips-linux-gnu-cpp" \
AR="mips-linux-gnu-ar" \
RANLIB="mips-linux-gnu-ranlib" \
AS="mips-linux-gnu-as" \
NM="mips-linux-gnu-nm" \
LD="mips-linux-gnu-ld" \
LDFLAGS="-L$CROSS_ROOTFS/lib" \
ADDR2LINE="mips-linux-gnu-addr2line"

ご存じないかもしれませんが、私はCodeSourceryツールチェーンを使用してmipsのクロスコンパイルを行っています。すべての変数(RANLIBなど)を指定する必要はないことは承知していますが、それがどのように害を及ぼす可能性があるかはわかりません。

[〜#〜]更新[〜#〜]

ここにリストされているように、問題はバンドルされた拡張機能の1つ(または複数)にあるようです: http://php.net/manual/en/extensions.membership.php

--disable-allを使用した構成は機能します。しかし、明らかに、実際の作業を行うには、これらのバンドルされた拡張機能の少なくともいくつかが必要です。

それでも、どのように私はどれを知ることができますか?

[〜#〜]更新[〜#〜]

問題を、デフォルトで有効になっているOPcacheという拡張機能に絞り込みました( http://us2.php.net/manual/en/opcache.installation.php を参照)。それを無効にした後、とにかく私のターゲットシステムでは機能しない他のいくつかの拡張機能とともに、正常にコンパイルされました。

それでも、これは私にはまったく明らかではありませんでした。私がしたことは、出力ログから逆方向に作業し、リストされた拡張機能を1つずつ無効にして、愚かなことが最終的に機能するようにすることでした。

確かに、これらのような問題を特定するためのより良い方法が存在する必要がありますか?そうでなければ、このオートメイクのナンセンスの全体的なポイントは一体何ですか?

3
Steven Liekens

opscacheにはlibtdlが必要です。これは、 GNU Libtool の一部です。

Linux

Linuxでは、たとえばUbuntuでlibltdl-devパッケージを入手します。

$ Sudo apt-get install libltdl-dev

Mac OSX

OSXの場合、インストールする最も簡単な方法GNU Libtoolは Homebrew を介してインストールすることです。

$ brew install libtool

具体的には、GNU Libtoolは、PHPコンパイルに使用される次のファイルを提供します

/usr/local/lib/libltdl.dylib
/usr/local/lib/libltdl.a
/usr/local/lib/libltdl.7.dylib

ちなみに、OSXには、libtdlインターフェイスを含まない独自のlibtoolのコピーが付属しています。競合を回避するために、GNU Libtoolツールのプレフィックスは 'g'になります(例:glibtoolおよびglibtoolize)。

Libtdl

詳細については、 http://www.gnu.org/software/libtool/manual/html_node/Libltdl-interface.html を参照してください。

1
hanxue