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
需要改变什么才能解决这些问题?
所以,看看它在哪里使用 icu-config。它应该做类似icu-config --cppflags
which should set-I/Server/Software/include
或类似的事情。您可以通过设置 CPPFLAGS 自行包含此类参数来解决此问题。
您可以在错误发生之前立即包含实际的编译命令行吗?
\n\n听起来像是 libxml 中的错误 - 它应该在 ${PREFIX}/bin 中搜索 icu-config。
\n\n此外,ICU 现在可以导出pkg-config
文件,这更像是查找此类项目的标准方法。
之前尝试一下WITH_ICU
:
ICU_CPPFLAGS=`icu-config --cppflags`\n CPPFLAGS="$CPPFLAGS $ICU_CPPFLAGS"\n
Run Code Online (Sandbox Code Playgroud)\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