我想在我的Mac上编译PHP。
我已经按照这个教程: http : //www.malisphoto.com/tips/php-on-os-x.html
我也检查了这个post: 在Snow Leopard 10.6.3上用intl扩展编译PHP 5.3.2
这里是我的configuration选项:
。/configuration \ --prefix = / usr \ --with-apxs2 = / usr / sbin / apxs \ --with-ldap = / usr \ --with-kerberos = / usr \ --enable-cli \ --with-zlib-dir = / usr \ --enable-exif \ --enable-ftp \ --enable-mbstring \ --enable-mbregex \ - 启用套接字\ --with-iodbc = / usr \ --with-curl = / usr \ --with-config-file-path = / etc / --sysconfdir = / private / etc \ --with-mysql-sock = / tmp \ --with-mysql = / usr / local / mysql \ --with-openssl = / usr \ --with-xmlrpc \ --with-xsl = / usr \ - 没有梨\ --with-libxml-dir = / usr \ --with-iconv = / usr / local \ --with-pdo-mysql = / usr / local / mysql / bin / mysql_config \ --with-gd \ --with-jpeg-dir = / opt / local \ --with-png-dir = / opt / local \ --with-freetype-dir = / opt / local \ --with-mcrypt = / opt / local \ --enable-intl \ --with-ICU-DIR = /select/本地
我改变了Makefile,取而代之:
$(CC)$(MH_BUNDLE_FLAGS)$(CFLAGS_CLEAN)$(EXTRA_CFLAGS)$(LDFLAGS)$(EXTRA_LDFLAGS)$(PHP_GLOBAL_OBJS:.lo = .o)$(PHP_SAPI_OBJS:.lo = .o)$(PHP_FRAMEWORKS)$( EXTRA_LIBS)$(ZEND_EXTRA_LIBS)-o $ @ && cp $ @ libs / libphp $(PHP_MAJOR_VERSION).so
对此:
$(CC)$(CFLAGS_CLEAN)$(EXTRA_CFLAGS)$(LDFLAGS)$(EXTRA_LDFLAGS)$(PHP_GLOBAL_OBJS:.lo = .o)$(PHP_SAPI_OBJS:.lo = .o)$(PHP_FRAMEWORKS)$(EXTRA_LIBS)$( ZEND_EXTRA_LIBS)$(MH_BUNDLE_FLAGS)-o $ @ && cp $ @ libs / libphp $(PHP_MAJOR_VERSION).so
我也有这个-lstdc ++进入Makefile中的EXTRA_LIBS。
这是错误信息:
在从/opt/local/include/unicode/utypes.h:36包含的文件中,
from /usr/local/src/php-5.3.3/ext/intl/grapheme/grapheme.h:21,
从/usr/local/src/php-5.3.3/ext/intl/php_intl.h:26,
从main / internal_functions.c:47:
/opt/local/include/unicode/umachine.h:308:错误:重新定义typedef'UChar'
/usr/include/libxml2/libxml/encoding.h:41:错误:之前的'UChar'声明在这里
make:*** [main / internal_functions.lo]错误1
我尝试了另一个没有intl的生成(删除./configure中最后两行),它的工作原理。
有人可以向我解释错误信息,或者说明./configure选项中可能出现的错误吗? 提前谢谢了
我试图做同样的事情,由于相同types的很多错误,失败了。 我试着一个接一个地纠正,而且还有一个! 我“降级”到PHP 5.2.14,没有更多的问题。
或者,再次,您可以自己从最新的稳定源代码包中构buildlibxml2,这是我所做的,因为回到5.2并不是一个选项,我在我的G4上手动编译了所有php的依赖项(libicu)开箱:1)从http://www.xmlsoft.org/downloads.html获取libxml2的最新发布的源码包2)编译libxml2:tar xf libxml2-sources-2.7.7.tar.gz cd libxml2-2.7.7 VER = 2.7.7 ./configure –enable-shared –enable-static –prefix = / opt / libxml2 – $ {VER} make && make install cd / opt; rm -rf libxml2; ln -s libxml2 – $ {VER} libxml2 3)使用–with-libxml-dir = / opt / libxml2编译php(不要忘记在rm config.cache中,以防万一您不清除configuration/build立尝试。)
希望它有帮助,chris
我知道这是旧的,但我遇到了同样的问题。 只需发表评论就行了
typedef uint16_t UChar;
在/opt/local/include/unicode/umachine.h为我解决了这个问题。
问题是ICU和libxml2都定义了UChar。 这是libxml2中有问题的代码,具体是/usr/include/libxml2/libxml/encoding.h:
#ifdef LIBXML_ICU_ENABLED /* Forward-declare UConverter here rather than pulling in <unicode/ucnv.h> * to prevent unwanted ICU symbols being exposed to users of libxml2. * One particular case is Qt4 conflicting on UChar32: <rdar://problem/5100933>. */ #include <stdint.h> struct UConverter; typedef struct UConverter UConverter; #ifdef _MSC_VER typedef wchar_t UChar; #else typedef uint16_t UChar; #endif #endif
如果你从源码安装libxml2,这个代码似乎不在那里,所以我通过使用从源代码安装的libxml2解决了这个问题。