我最近从 OS X Yosemite 升级到了 El Capitan,需要重新安装 PHP。因此,我下载了 php (版本 5.6.14),运行了该./configure
文件,然后运行了sudo make
。但是,执行此操作时,编译失败,并显示以下尾随消息:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sapi/cli/php] Error 1
我在 Mac OS X 10.9.5 (Yosemite) 上从未遇到过此消息。
我该如何解决此消息?我尝试禁用系统完整性保护 (SIP),但没有效果。
答案1
根据 GitHub 问题报告,在 Mac OS X 10.11 (El Capitan) 上构建 PHP 5.6.11 beta 版存在问题,关键问题与此有关libxml2
。他们对 Homebrew 的建议是运行以下brew link
命令:
brew link libxml2 --force
但是如果您从纯源代码进行编译,则不能 100% 确定将如何处理。
话虽如此,我发现了类似的问题锯木要诀—标题很搞笑“如果 libxml2 是个混蛋该怎么办”—线索明确指向 LibXML2 的东西,像这样:
--with-xml2-include=/usr/local/include/libxml2
但——当然——那将是 Nokogiri 的配置选项。但看看PHP 官方文档解释如下:
可选--with-libxml-dir指令用于指定库在编译 PHP 的系统上,否则只会扫描默认位置。
因此知道它似乎添加--with-libxml-dir
到您的./configure
命令中(具有如下所示的路径设置)应该可以工作:
--with-libxml-dir=/usr/local/include/libxml2
话虽如此,这个人的网站上有一个很好的教程关于如何在 Mac OS X 中编译 PHP 5.5.24,该版本已更新以适应 Mac OS X 10.10.5 和 Mac OS X 10.11。如果您查看命令,./configure
您会发现该人正在使用--with-libxml-dir=/usr
。虽然信息显示为 PHP 5.5.24,但我认为 PHP 5.6.14 的过程应该类似,即使不相同。以下是它们的完整./configure
命令供参考:
./configure '--prefix=/usr' \
'--mandir=/usr/share/man' \
'--infodir=/usr/share/info' \
'--sysconfdir=/private/etc' \
'--with-apxs2=/usr/sbin/apxs' \
'--enable-cli' \
'--with-config-file-path=/etc' \
'--with-config-file-scan-dir=/Library/Server/Web/Config/php' \
'--with-libxml-dir=/usr' \
'--with-openssl=/usr' \
'--with-kerberos=/usr' \
'--with-zlib=/usr' \
'--enable-bcmath' \
'--with-bz2=/usr' \
'--enable-calendar' \
'--disable-cgi' \
'--with-curl=/usr' \
'--enable-dba' \
'--with-ndbm=/usr' \
'--enable-exif' \
'--enable-fpm' \
'--enable-ftp' \
'--with-icu-dir=/usr' \
'--with-ldap=/usr' \
'--with-ldap-sasl=/usr' \
'--with-libedit=/usr' \
'--enable-mbstring' \
'--enable-mbregex' \
'--with-mysql=mysqlnd' \
'--with-mysqli=mysqlnd' \
'--without-pear' \
'--with-pear=no' \
'--with-pdo-mysql=mysqlnd' \
'--with-mysql-sock=/var/mysql/mysql.sock' \
'--with-readline=/usr' \
'--enable-shmop' \
'--with-snmp=/usr' \
'--enable-soap' \
'--enable-sockets' \
'--enable-sysvmsg' \
'--enable-sysvsem' \
'--enable-sysvshm' \
'--with-tidy' \
'--enable-wddx' \
'--with-xmlrpc' \
'--with-iconv-dir=/usr' \
'--with-xsl=/usr' \
'--enable-zip'
答案2
除非您特别需要较新的版本,否则 PHP 5.5.27 随 OS X El Capitan 一起提供。
您可以取消注释(删除#)httpd.conf(用于访问)LoadModule php5_module libexec/apache2/libphp5.so
中的行之前的内容。sudo nano /etc/apache2/httpd.conf