Ошибки, связывающие libresolv при сборке PHP 5.2.10 из исходного кода на OS X
-
05-07-2019 - |
Вопрос
Для начала я бы предпочел использовать предварительно скомпилированный бинарный файл PHP, но мне нужно собирать его из исходного кода для конкретной бизнес-задачи. (Я не из тех, кто собирает приложения с открытым исходным кодом только для удовольствия.)
Я работаю на OS X 10.6 и сталкиваюсь со следующей ошибкой при попытке сделать
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.
Решение
Попробуйте добавить -lresolv в ваш Makefile.
Надеюсь, это поможет. Я получил предложение из этого обсуждения .
Другие советы
Если вы установили переменную среды configure перед запуском скрипта configure, вам не нужно редактировать make-файл. Например:
LIBS=-lresolv ./configure --with-apxs2 --with-gd (etc.)
Это решение сработало для меня.
Я бы порекомендовал разрешить зависимости, используя fink / macports . Скомпилируйте все компоненты, используя macports, а затем скомпилируйте php из исходного кода, указав директории lib в / opt / ...
Вы даже можете создавать php напрямую из исходного кода, используя macports.
Для тех, кто не может понять, куда добавить -lresolv:)
Отредактируйте Makefile, найдите строку:
EXTRA_LIBS = [...lots of libs here...]
и добавьте -lresolv к этой строке следующим образом:
EXTRA_LIBS = -lresolv [...lots of libs here...]
Я работал на MacOS X 10.6 Snow Leopard во время компиляции PHP для LiteSpeed.