在OS X上从源代码构建PHP 5.2.10时链接libresolv的错误

时间:2009-07-30 04:23:46

标签: php compilation automake

首先,我通常会选择使用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构建。

4 个答案:

答案 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工作。