Tôi đang cố khắc phục lỗi trong libxml2. Tôi không thể làm cho nó biên dịch với --with-icu
khi sử dụng --prefix=/Server/software
. Tôi đã gửi bug report here, nhưng tôi cần làm cho nó biên dịch để giải quyết xung đột khi biên dịch PHP với hỗ trợ intl. Tôi nghi ngờ đó là một vấn đề với Makefile. Kinh nghiệm của tôi với Makefile's bị hạn chế. Kết quả mong muốn được đưa ra với một bản vá có thể được gửi đến báo cáo lỗi được liên kết.Làm cách nào để vá libxml2 để nó sẽ biên dịch với hỗ trợ ICU khi sử dụng tiền tố?
Cờ --with-icu
làm cho LIBXML_ICU_ENABLED
được xác định. Mã được bao gồm có nghĩa vụ giải quyết xung đột khi bao gồm tiêu đề từ cả icu và libxml2 (cụ thể, cả hai đều sử dụng UChar). Intl plugin PHP, được kích hoạt với --enable-intl
, yêu cầu icu. libxml2 là cần thiết cho PHP cho các hàm DOM/XML.
Có hai vấn đề.
Thứ nhất, cấu hình này:
./configure --prefix=/Server/software --enable-shared --enable-static --with-icu
Kết quả trong:
configure: error: libicu config program icu-config not found
Điều này xảy ra vì mã này trong 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
Cụ ICUCONFIG=icu-config
không tôn trọng --prefix=/Server/software
. Tôi có thể giải quyết vấn đề này bằng cách thực hiện export PATH=/Server/software/bin:$PATH
.
Điều này "khắc phục" sự cố ./configure.
Thứ hai, khi tôi chạy make
tôi nhận lỗi, những con người relavent nhất:
./include/libxml/encoding.h:31:26: error: unicode/ucnv.h: No such file or directory
File unicode/uncv.h
là trong /Server/software/include/unicode/uncv.h
. Tôi nghi ngờ trình biên dịch đang tìm kiếm tệp này trong thư mục cục bộ và trong thư mục/usr của tôi.
Đây là những gì các lỗi được đề cập đến:
#ifdef LIBXML_ICU_ENABLED
#include <unicode/ucnv.h>
#endif
Rõ ràng đây là một vấn đề khi sử dụng đường --with-icu
và --prefix=/Server/software
. Nếu không có --with-icu
nó biên dịch tốt, nhưng điều này là cần thiết để giải quyết một xung đột UChar xác định khi biên dịch PHP với cả icu và libxml2.
Kết quả của icu-config --cflags
là:
-O2 -Wall -ansi -pedantic -Wshadow -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long
này đã được đường ống vào/dev/null.
Kết quả của icu-config --ldflags
là:
-lpthread -lm -L/Server/software/lib -licui18n -licuuc -licudata -lpthread -lm
Những gì cần phải được thay đổi để giải quyết những vấn đề này?
Tôi đã đăng một bản vá cho vấn đề ICU_CONFIG: https://bugzilla.gnome.org/show_bug.cgi?id=663214 –