2011-11-02 21 views
5

私はlibxml2のバグを修正しようとしています。 --prefix=/Server/softwareを使用すると、--with-icuとコンパイルできません。私はbug report hereを提出しましたが、intlサポートでPHPをコンパイルするときに、それをコンパイルするためにコンパイルする必要があります。私はそれがMakefileの問題だと思う。 Makefileの私の経験は限られています。目的の結果に、リンクされたバグレポートに提出できるパッチがあります。接頭辞を使用するときにICUサポートでコンパイルするようにlibxml2にパッチを適用するにはどうすればよいですか?

--with-icuフラグは、LIBXML_ICU_ENABLEDを定義します。インクルードされたコードは、icuとlibxml2の両方のヘッダー(特に、両方ともUCharを使用している)を含めると競合を解決すると考えられています。 --enable-intlで有効化されたPHPプラグインintlにはicuが必要です。 libxml2は、PHPがDOM/XML関数に必要です。

2つの問題があります。

まず、この設定:

./configure --prefix=/Server/software --enable-shared --enable-static --with-icu

結果で:

configure: error: libicu config program icu-config not found

これは、configure.inで、このコードで起こる:

具体的
WITH_ICU=0 
if test "$with_icu" != "yes" ; then 
    echo Disabling ICU support 
else 
    ICU_CONFIG=icu-config 
    if ${ICU_CONFIG} --cflags >/dev/null 2>&1 
    then 
     ICU_LIBS=`icu-config --ldflags` 
     LDFLAGS="$LDFLAGS $ICU_LIBS" 
     WITH_ICU=1 
     echo Enabling ICU support 
    else 
     AC_MSG_ERROR([libicu config program icu-config not found]) 
    fi 
fi 

ICUCONFIG=icu-config--prefix=/Server/softwareを尊重していません。私はexport PATH=/Server/software/bin:$PATHを実行してこれを回避することができます。

これは./configureの問題を「修正」します。

第二に、私はエラーを取得makeを実行すると、ほとんどのrelaventビーイング:

./include/libxml/encoding.h:31:26: error: unicode/ucnv.h: No such file or directory

unicode/uncv.hファイルが/Server/software/include/unicode/uncv.hです。コンパイラがローカルディレクトリと/ usrディレクトリにあるこのファイルを探していると思われます。 --with-icu--prefix=/Server/softwareを使用する際に明らかにこれは、パスの問題である

#ifdef LIBXML_ICU_ENABLED 
#include <unicode/ucnv.h> 
#endif 

これは、エラーが参照しているものです。 --with-icuがなければうまくコンパイルされますが、これはicuとlibxml2の両方でPHPをコンパイルするときに定義されたUCharの競合を解決するために必要です。

icu-config --cflagsの結果である:これはを/ dev/nullにパイプされ

-O2 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long

icu-config --ldflagsの結果は次のとおりです。

-lpthread -lm -L/Server/software/lib -licui18n -licuuc -licudata -lpthread -lm

これらの問題を解決するために変更する必要がありますか?

+0

私はICU_CONFIG問題のパッチを掲載しました:https://bugzilla.gnome.org/show_bug.cgi?id=663214 –

答えて

2

icu-configがどこで使用されているかを見てください。それはicu-config --cppflagsのような何かをする必要があります-I/Server/Software/includeまたは同様の設定する必要があります。そのようなパラメータを自分自身に含めるようにCPPFLAGSを設定することで、回避することができます。

エラーの直前に実際のコンパイルコマンドラインを含めることはできますか?

libxmlのバグのように聞こえます。icu-configのために$ {PREFIX}/binを検索する必要があります。

また、ICUはpkg-configファイルをエクスポートするようになりました。これらのファイルは、標準的な検索方法です。


WITH_ICU前にこれを試してみてください:

ICU_CPPFLAGS=`icu-config --cppflags` 
    CPPFLAGS="$CPPFLAGS $ICU_CPPFLAGS" 

更新私はルークの最後の応答を引用するつもりです。うまくいきました。

私はリンカーの問題を解決しました。今はすべて動作します。この質問のために、libxml 2.7.7を使用して を解決しました。 OX X 10.6は 2.7.8となっています。ですから、libxml2を2.7.7でコンパイルしなければなりません。リンカの問題は、PHPの./configureの直前にLIBS = " - lresolv -lstdC++"を追加することで解決されます。非標準の場所にインストールする場合は、 --enable-rpathでICUをコンパイルする必要もあります。私はあなたの答えを受け入れました。この情報で気軽に更新してください:)。 - ルカ17時間前

+0

私はより多くののrelaventの部分を含めるために、質問を更新しましたconfigure.inで使用される場合はconfigure.inとicu-configの出力を使用します。 'icu-config --ldflags'は、'/Server/software'を渡して 'encoding.h'でインクルードするようになっているようですが、それは通過しません。同様のことをするかもしれない他のパッケージを探している。 – Luke

+0

libxml2のビルドに関する問題を修正したようです。しかし、私のPHPの設定は 'libxmlのビルドが動作しているかどうかをチェックしていますが、失敗しました。 config.logのrelavantビットは 'configure:21707:gcc -o conftest -fvisibility = hidden -no-cpp-precomp -Wl、-rpath、/ Server/software/lib -L ​​/ Server/software/lib conftest.cです。 '。 libxml2を '--with-icu'でコンパイルしないと、PHPがうまくいきません(私が必要とする' --enable-intl'を含めないと)。 – Luke

+0

@ルークPHPのconfig.logとは何ですか? Intlは私があなたが意識していると仮定してICUを使用します。 intlはあなたがlibxml2に使用しているものと同じICUを使用しています。 –

関連する問題