我正試圖修復libxml2中的錯誤。當使用--prefix=/Server/software
時,我無法使用--with-icu
進行編譯。我已經提交了一個bug report here,但是我需要編譯它來編譯支持intl的PHP時解決衝突。我懷疑這是Makefile的問題。我對Makefile的使用經驗有限。想要的結果是提出一個補丁,可以提交給鏈接的錯誤報告。如何修補libxml2,以便在使用前綴時支持ICU編譯?
--with-icu
標誌導致LIBXML_ICU_ENABLED
被定義。包含的代碼在包含來自icu和libxml2的頭文件(尤其是使用UChar)時應該解決衝突。用--enable-intl
激活的PHP插件intl需要icu。 PHP爲DOM/XML功能需要libxml2。
有兩個問題。
首先,此配置:在
./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目錄中查找這個文件。
這是錯誤指的是:
#ifdef LIBXML_ICU_ENABLED
#include <unicode/ucnv.h>
#endif
顯然,這是一個路徑問題,使用--with-icu
和--prefix=/Server/software
時。沒有--with-icu
它編譯得很好,但是在編譯具有icu和libxml2的PHP時,需要解決定義的UChar衝突。
的icu-config --cflags
結果是:
-O2 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long
這是正在管道輸送到的/ dev/null的。
的icu-config --ldflags
結果是:
-lpthread -lm -L/Server/software/lib -licui18n -licuuc -licudata -lpthread -lm
有什麼需要改變,以解決這些問題?
我已經發布了一個補丁用於ICU_CONFIG問題:https://bugzilla.gnome.org/show_bug.cgi?id=663214 –