まず、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から構築しています。
これは良いリードです。私は、コンパイルスクリプトを10.5のマシンで実行したところ、うまく構築されていたので、これは間違いなくSnow Leopardの新機能です。残念ながら、Makefileに '-lresolv'をどこに追加するのかが分かりません。 (もし私が環境変数を設定して '。/ configureは私のためにそれを追加します。)MacPortsは独自のportfile形式を使用していますので、残念なことに詳細についてはあまり役に立ちません。 –
それを考え出してください。 ** [uname -r' == "10.0.0"]の場合は**を追加しました。 EXTRA_LDFLAGS = -lresolvをエクスポートします。 fi **を実行してから '。/ configure'を呼び出すと、Makefileに-lresolvが追加されました。私は正しい方向に私を指して以来、私はこの答えを受け入れています。ありがとう! –
この回答を受け入れて以来、私は '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以上を確認する。 –