5

首先,我通常会选择使用 PHP 的预编译二进制文件,但需要从源代码构建以满足特定的业务需求。(我不是那种为了好玩而编译开源应用程序的类型。)

我在 OS X 10.6 上构建,当我尝试将makePHP 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,它包含在/usr/lib/libresolv.dylibOS X 上(并且至少从10.4 开始)。请注意,*.dylib文件是 Linux 上文件的 Mac 等价物*.so,我libiconv.dylib已经通过传递成功编译了--with-iconv=shared,/usrto ./configure,这消除了iconv库的类似链接器错误。

当我运行时,它会在 makefile 中./configure检测并启用它。/usr/include/resolv.h但是,我似乎无法弄清楚如何让共享库正确链接。关于让它发挥作用的任何提示?我从来没有做过任何类似将自定义链接器标志传递./configure给的事情,不幸的是,谷歌在这个问题上对我没有帮助。


编辑:如果有人想尝试在 Snow Leopard 上复制错误,我正在从这个 TAR 下载中构建。

4

4 回答 4

4

尝试将 -lresolv 添加到您的 Makefile。

希望这可以帮助。我从这个讨论中得到了建议。

于 2009-07-30T04:36:49.763 回答
3

如果在运行配置脚本之前设置了配置环境变量,则不必编辑生成文件。例如:

LIBS=-lresolv ./configure --with-apxs2 --with-gd (etc.)

这个解决方案对我有用。

于 2009-08-31T02:16:08.310 回答
2

我建议使用 fink/ macports解决依赖关系。使用 macports 构建所有组件,然后从源代码编译 php,将 lib 目录指向 /opt/...

您甚至可以使用 macports 直接从源代码构建 php。

于 2009-07-30T09:58:19.313 回答
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 上为我工作。

于 2009-08-18T17:46:55.230 回答