我正在尝试修复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
需要更改哪些内容才能解决这些问题?
答案 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小时前