2009-07-30 2 views
5

まず、PHPのプリコンパイル済みバイナリを使用することを選択しますが、特定のビジネスニーズに合わせてソースからビルドする必要があります。 (私はちょうどキックのためにオープンソースのアプリケーションをコンパイルするタイプではありません)OS XのソースからPHP 5.2.10をビルドするときにlibresolvをリンクするエラー

私はOS X 10.6上にビルドしています。make ApacheモジュールとしてPHP 5.2.10を試してみると、次のエラーに遭遇しています。 (--with-apxs2):

Undefined symbols: 
    "_res_9_dn_expand", referenced from: 
     _zif_dns_get_mx in dns.o 
    "_res_9_search", referenced from: 
     _zif_dns_get_mx in dns.o 
     _zif_dns_check_record in dns.o 
    "_res_9_dn_skipname", referenced from: 
     _zif_dns_get_mx in dns.o 
     _zif_dns_get_mx in dns.o 
ld: symbol(s) not found 

これらのシンボルは、OS X上/usr/lib/libresolv.dylibで含まれる(および少なくとも 10.4以来されている)libresolvの一部です。 *.dylibファイルは、Macの*.so相当のファイルであり、iconvライブラリの同様のリンカエラーを解消した--with-iconv=shared,/usr./configureに渡して既にlibiconv.dylibにコンパイルしました。

./configureを実行すると、/usr/include/resolv.hが検出され、それがmakefileで有効になります。しかし、共有ライブラリを正しくリンクさせる方法を見つけることはできません。それを稼働させるためのヒント?私は./configureにカスタムリンカーフラグを渡すようなことは一度もしていません。残念なことに、Googleはこの問題のために私に何の助けにもなりませんでした。


編集:誰もがSnow Leopardの上でエラーを再現しようとしたい場合、私はthis TAR downloadから構築しています。

答えて

4

Makefileに-lresolvを追加してみてください。

これが役に立ちます。私はこのdiscussionからの提案を得ました。

+0

これは良いリードです。私は、コンパイルスクリプトを10.5のマシンで実行したところ、うまく構築されていたので、これは間違いなくSnow Leopardの新機能です。残念ながら、Makefileに '-lresolv'をどこに追加するのかが分かりません。 (もし私が環境変数を設定して '。/ configureは私のためにそれを追加します。)MacPortsは独自のportfile形式を使用していますので、残念なことに詳細についてはあまり役に立ちません。 –

+1

それを考え出してください。 ** [uname -r' == "10.0.0"]の場合は**を追加しました。 EXTRA_LDFLAGS = -lresolvをエクスポートします。 fi **を実行してから '。/ configure'を呼び出すと、Makefileに-lresolvが追加されました。私は正しい方向に私を指して以来、私はこの答えを受け入れています。ありがとう! –

+0

この回答を受け入れて以来、私は 'uname -r | 'を使ってカーネルのメジャーバージョン(この場合は10)を取得するようにコードを更新しました。カットド。代わりに-f 1を使用します。 OS X 10.6.0にはカーネルバージョン10.0.0、OS X 10.6.2にはバージョン10.2.0などがありますが、これは重要です。この値を '$ KERNEL_MAJOR'に保存し、' if [$ KERNEL_MAJOR -ge 10];を使用します。 10.6以上を確認する。 –

2

fink/macportsを使用して依存関係を解決することをお勧めします。 macportsを使用してすべてのコンポーネントをビルドし、libディレクトリを指すソースからphpをコンパイルして/ opt/.../

macportsを使用してソースから直接PHPをビルドすることもできます。 -lresolvを追加する場所を見つけ出すことはできません人のために

+0

残念ながら、これは実現できません。コンパイルされたバイナリは非常に特殊なカスタムの場所(つまり '/ opt'ではなく)にあり、最小限の依存関係しか持たないからです。しかし一般的には、良い提案です。 –

2

:)

Makefileを編集し、行を見つける:

EXTRA_LIBS = [...lots of libs here...] 

をし、このように、この行に-lresolv追加:

EXTRA_LIBS = -lresolv [...lots of libs here...] 

LiteSpeed用にPHPをコンパイルしているときに、MacOS X 10.6 Snow Leopardで作業しました。

+0

それはうまくいくでしょう。上記の受け入れられた答えにコメントを追加しました。これは、./configureを実行する前に必要なところにこのフラグを追加し、Snow Leopardでのみ追加します。手を動かすよりも少し簡単です(そしてより自動化が可能です)。 –

3

configureスクリプトを実行する前にconfigure環境変数を設定した場合、makefileを編集する必要はありません。例:

LIBS=-lresolv ./configure --with-apxs2 --with-gd (etc.) 

この解決策は私に役立ちました。

関連する問題