Ошибки, связывающие libresolv при сборке PHP 5.2.10 из исходного кода на OS X - PullRequest
5 голосов
/ 30 июля 2009

Начнем с того, что я обычно предпочитаю использовать предварительно скомпилированный двоичный файл 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, который включен в /usr/lib/libresolv.dylib в OS X (и был с по крайней мере 10.4). Обратите внимание, что *.dylib файлы - это эквивалент Mac *.so файлов в Linux, и я уже успешно скомпилировал в libiconv.dylib, передав --with-iconv=shared,/usr в ./configure, что устранило аналогичные ошибки компоновщика для библиотеки iconv .

Когда я запускаю ./configure, он обнаруживает /usr/include/resolv.h и включает его в make-файл. Тем не менее, я не могу понять, как заставить общую библиотеку правильно связываться. Любые советы, как заставить это работать? Я никогда не делал ничего подобного передаче пользовательских флагов компоновщика на ./configure, и Google, к сожалению, не помог мне в этой проблеме.


Редактировать: Я строю из этой загрузки TAR , если кто-то захочет попытаться повторить ошибку на Snow Leopard.

Ответы [ 4 ]

4 голосов
/ 30 июля 2009

Попробуйте добавить -lresolv в ваш Makefile.

Надеюсь, это поможет. Я получил предложение из этой дискуссии .

3 голосов
/ 31 августа 2009

Если вы установите переменную среды configure перед запуском скрипта configure, вам не нужно редактировать make-файл. Например:

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

Это решение сработало для меня.

2 голосов
/ 18 августа 2009

Для тех, кто не может понять, куда добавить -lresolv:)

Отредактируйте Makefile, найдите строку:

EXTRA_LIBS = [...lots of libs here...]

и добавьте -lresolv к этой строке следующим образом:

EXTRA_LIBS = -lresolv [...lots of libs here...]

Работал для меня на MacOS X 10.6 Snow Leopard во время компиляции PHP для LiteSpeed.

2 голосов
/ 30 июля 2009

Я бы рекомендовал разрешить зависимости, используя fink / macports . Скомпилируйте все компоненты, используя macports, а затем скомпилируйте php из исходного кода, указав директории lib в / opt / ...

Вы даже можете собрать php напрямую из источника, используя macports.

...