如何修补libxml2,以便在使用前缀时使用ICU支持进行编译?

时间:2011-11-02 21:53:00

标签: c makefile libxml2 icu

我正在尝试修复libxml2中的错误。使用--with-icu时,我无法使用--prefix=/Server/software进行编译。我已经提交了bug report here,但是我需要编译它以便在使用intl支持编译PHP时解决冲突。我怀疑这是Makefile的一个问题。我对Makefile的经验有限。期望的结果是提供一个可以提交给链接的错误报告的补丁。

--with-icu标志导致LIBXML_ICU_ENABLED被定义。当包含来自icu和libxml2的头文件时(特别是两者都使用UChar),包含的代码应该解决冲突。用--enable-intl激活的PHP插件intl需要icu。 PHP需要libxml2用于DOM / XML函数。

有两个问题。

首先,这个配置:

./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时,我得到错误,最相关的是:

./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

需要更改哪些内容才能解决这些问题?

1 个答案:

答案 0 :(得分:2)

所以,看看它在哪里使用icu-config。它应该像icu-config --cppflags那样设置-I/Server/Software/include或类似的东西。您可以通过设置CPPFLAGS来自己包含这样的参数来解决它。

您可以在错误发生之前包含实际的编译命令行吗?

听起来像libxml中的一个错误 - 它应该搜索$ {PREFIX} / bin for icu-config。

此外,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。因此,要使其工作,您必须自己使用2.7.7编译libxml2。通过在PHP的./configure之前添加LIBS =“ - lresolv -lstdc ++”来解决链接器问题。如果安装到非标准位置,您还需要编译ICU   --enable-rpath的。我接受了你的回答。随意使用此信息更新它:)。 - Luke 17小时前