1

这是我make在配置后运行后得到的消息。

Undefined symbols for architecture x86_64:
  "_res_9_init", referenced from:
      _zif_dns_check_record in dns.o
      _zif_dns_get_record in dns.o
      _zif_dns_get_mx in dns.o
  "_res_9_search", referenced from:
      _zif_dns_check_record in dns.o
      _zif_dns_get_record in dns.o
      _zif_dns_get_mx in dns.o
  "_res_9_dn_skipname", referenced from:
      _zif_dns_get_record in dns.o
      _zif_dns_get_mx in dns.o
  "_res_9_dn_expand", referenced from:
      _php_parserr in dns.o
      _zif_dns_get_mx in dns.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我如何配置

./configure --prefix=/usr/ --with-apxs2=/usr/sbin/apxs --with-mysql \
--with-pear --with-pdo-pgsql \
--with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/tmp/mysql.sock \
--with-pgsql --with-zlib \
--with-zlib-dir=/usr \
--with-openssl \
--without-iconv \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-mbregex \
--enable-sockets 

请问有人可以帮忙吗?

4

3 回答 3

1

这个超过 3 年的错误(提到这里这里,为什么他们还没有修复它?)也可以通过执行以下操作来解决(或者可能通过将不正确的库移出路径,这也可能有效) .

编辑您的Makefile并将以下标志添加到该EXTRA_LIBS =部分(除了已经存在的其他标志):

EXTRA_LIBS = -lsResolv

您提到的第二个错误:ext/phar/phar.php] Error 133是由于MySQL二进制安装程序安装的“lib”目录中的一个文件没有绝对路径引起的(这已经有一段时间的错误了,为什么Oracle没有修理它??)。如果您查看您提到的错误行上方的几行,您会看到它说:

Generating phar.php
dyld: Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/...

通过执行此操作检查该文件(将下面的版本号替换为您的版本号,例如 mysql-5.x.xx)。请注意结果,它不像其他文件引用那样包含完整路径:

# otool -L /usr/local/mysql-5.6.14-osx10.6-x86_64/lib/libmysqlclient.18.dylib

然后像这样修复它:

# sudo install_name_tool -id /usr/local/mysql-5.6.14-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-5.6.14-osx10.6-x86_64/lib/libmysqlclient.18.dylib

再次检查以确保:

# otool -L /usr/local/mysql-5.6.14-osx10.6-x86_64/lib/libmysqlclient.18.dylib

现在,您应该能够成功编译。

于 2013-10-18T15:16:56.377 回答
0

使用本机 mysql 和 mysqli 驱动程序编译 PHP。此错误是由 php 和 mysql 库之间的冲突引起的。如果您不想使用本机驱动程序,请使用“export EXTRA_CFLAGS=-lresolv”,运行make,这将解决未定义的符号。

将您的配置更改为:

./configure \
--prefix=/usr/ \
--with-apxs2=/usr/sbin/apxs 
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-pear --with-pdo-pgsql \
--with-mysql-sock=/tmp/mysql.sock \
--with-pgsql --with-zlib \
--with-zlib-dir=/usr \
--with-openssl \
--without-iconv \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-mbregex \
--enable-sockets 

顺便说一句,如果你将 mysql 套接字留在 /tmp 中,不要忘记执行 "chmod +t /tmp"

于 2012-07-12T18:15:59.327 回答
0

问题的实际来源仍然模糊,但可以肯定的是我的配置错误。只有从 /usr/bin 中删除所有原生 php 的痕迹,然后我下载了最新的稳定 php 5.4 tarball 并将其解压缩并使用以下选项重新配置后,才能解决造成问题的冲突:

./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-libxml-dir=/usr  \
--with-openssl=/usr  \
--with-kerberos=/usr  \
--with-zlib=/usr  \
--enable-bcmath  \
--with-bz2=/usr  \
--enable-calendar  \
--with-curl=/usr  \
--enable-dba  \
--enable-exif  \
--enable-ftp  \
--with-gd  \
--enable-gd-native-ttf  \
--with-icu-dir=/usr  \
--with-iodbc=/usr  \
--with-ldap=/usr  \
--with-ldap-sasl=/usr  \
--with-libedit=/usr  \
--enable-mbstring  \
--enable-mbregex  \
--with-mysql=mysqlnd   \
--with-mysqli=mysqlnd  \
--without-pear  \
--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  \
--with-pcre-regex  \
--with-pgsql=/usr  \
--with-pdo-pgsql=/usr \
--with-freetype-dir=/usr/X11 \
--with-jpeg-dir=/usr  \
--with-png-dir=/usr/X11

之后我运行 $ sudo make test,然后安装。

然后我重新启动了 apache $ sudo serveradmin stop/start web

然后它 f* **起作用了。

于 2012-07-13T23:16:44.023 回答