首先,我通常会选择使用PHP的预编译二进制文件,但我需要根据特定的业务需求从源代码构建。 (我不是那种只为了解决而编译开源应用程序的类型。)
我正在构建OS X 10.6,当我尝试将make
PHP 5.2.10作为Apache模块(--with-apxs2
)时遇到以下错误:
Undefined symbols:
"_res_9_dn_expand", referenced from:
_zif_dns_get_mx in dns.o
"_res_9_search", referenced from:
_zif_dns_get_mx in dns.o
_zif_dns_check_record in dns.o
"_res_9_dn_skipname", referenced from:
_zif_dns_get_mx in dns.o
_zif_dns_get_mx in dns.o
ld: symbol(s) not found
这些符号是libresolv
的一部分,它包含在OS X的/usr/lib/libresolv.dylib
上(自至少 10.4以来)。请注意,*.dylib
文件与Mac上的*.so
文件相当,我已经成功编译libiconv.dylib
已将--with-iconv=shared,/usr
传递给./configure
,消除了iconv
库的类似链接器错误。
当我运行./configure
时,它会检测到/usr/include/resolv.h
并在makefile中启用它。但是,我似乎无法弄清楚如何正确链接共享库。有关使其工作的任何提示?我从未做过将自定义链接器标志传递给./configure
的任何事情,不幸的是,Google对此问题一直没有帮助。
修改:如果有人想尝试在Snow Leopard上复制错误,我正在this TAR download构建。
答案 0 :(得分:4)
尝试将-lresolv添加到Makefile中。
希望这会有所帮助。我从discussion得到了建议。
答案 1 :(得分:3)
如果在运行configure脚本之前设置configure环境变量,则不必编辑makefile。例如:
LIBS=-lresolv ./configure --with-apxs2 --with-gd (etc.)
这个解决方案对我有用。
答案 2 :(得分:2)
我建议使用fink / macports来解析依赖项。使用macports构建所有组件,然后从指向lib目录的源代码编译php到/ opt / ...
你甚至可以使用macports直接从源代码构建php。
答案 3 :(得分:2)
对于那些无法弄清楚在哪里添加-lresolv的人:)
编辑Makefile,找到行:
EXTRA_LIBS = [...lots of libs here...]
并将-lresolv添加到此行:
EXTRA_LIBS = -lresolv [...lots of libs here...]
在为LiteSpeed编译PHP时为MacOS X 10.6 Snow Leopard工作。