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

Luk*_*uke 5 c makefile libxml2 icu

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

--with-icu标志使LIBXML_ICU_ENABLED被定义.当包含来自icu和libxml2的头文件时(特别是两者都使用UChar),包含的代码应该解决冲突.用于激活的PHP插件intl --enable-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
Run Code Online (Sandbox Code Playgroud)

特别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
Run Code Online (Sandbox Code Playgroud)

显然,这是使用--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

需要改变什么才能解决这些问题?

Ste*_*mis 2

所以,看看它在哪里使用 icu-config。它应该做类似icu-config --cppflagswhich should set-I/Server/Software/include或类似的事情。您可以通过设置 CPPFLAGS 自行包含此类参数来解决此问题。

\n\n

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

\n\n

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

\n\n

此外,ICU 现在可以导出pkg-config文件,这更像是查找此类项目的标准方法。

\n\n
\n\n

之前尝试一下WITH_ICU

\n\n
    ICU_CPPFLAGS=`icu-config --cppflags`\n    CPPFLAGS="$CPPFLAGS $ICU_CPPFLAGS"\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

更新我要引用卢克的最后回应。很高兴它能工作。

\n\n
\n

我解决了链接器问题,所以现在一切正常了。对于这个问题,使用 libxml 2.7.7 是解决方案。OX X 10.6 似乎附带了\n 2.7.8。因此,要使其工作,您必须自己使用 2.7.7 编译 libxml2。通过在 PHP 的 ./configure 之前添加 LIBS="-lresolv -lstdc++" 可以解决链接器问题。如果安装到非标准位置,您还需要使用\n --enable-rpath 编译 ICU。我已经接受了你的回答。请随时使用此信息更新它:)。\xe2\x80\x93 卢克 17 小时前

\n
\n