这是我在配置后运行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
请帮忙吗?
答案 0 :(得分:1)
这个超过3年的bug(提到here和here,为什么还没有修复它?)也可以通过执行以下操作(或者可能通过移动不正确的库)来解决走出路径,这可能也有效。)
修改您的Makefile
并将以下标记添加到EXTRA_LIBS =
部分(除了已存在的其他标记):
EXTRA_LIBS = -lsResolv
您提到的第二个错误:ext/phar/phar.php] Error 133
是由MySQL二进制安装程序 安装的“lib”目录中的一个文件没有绝对路径的原因造成的em> (这已经有一段时间了,为什么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
现在,您应该能够成功编译。
答案 1 :(得分: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”
答案 2 :(得分:0)
问题的实际来源仍然模糊,但可以肯定的是我的配置是错误的。创建问题的冲突只有在删除本机php的所有痕迹后才解决 - 从/ usr / bin中删除了字面意义然后我下载了最新的稳定的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 * ** 工作。