Для начала я бы предпочел использовать предварительно скомпилированный двоичный файл PHP, но мне нужно построить из источника для конкретной бизнес-потребности. (Я не тип, который компилирует приложения с открытым исходным кодом только для ударов.)Ошибки, связывающие libresolv при создании PHP 5.2.10 из исходного кода на OS X
Я строил на 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
и включил его в файл makefile. Тем не менее, я не могу понять, как правильно использовать общую библиотеку. Какие-нибудь советы по работе с этим? Я никогда не делал ничего подобного прохождению пользовательских флагов компоновщика до ./configure
, и Google, к сожалению, не помог мне в этой проблеме.
Edit: Я строю из this TAR download, если кто-то хочет, чтобы попытаться воспроизвести ошибку на Snow Leopard.
Это хорошее преимущество. Я просто запускал свой скрипт компиляции на машине с 10.5, и он был построен просто отлично, поэтому это определенно проблема, новая для Snow Leopard. К сожалению, мне трудно понять, где добавить '-lresolv' в Makefile. (Было бы еще лучше, если бы я мог сделать что-то вроде установки переменной среды и иметь './ configure' добавьте его для меня.) MacPorts использует собственный формат портфайлов, поэтому, к сожалению, это не очень полезно для специфики ... –
Выяснил это. Я добавил **, если ['uname -r' ==" 10.0.0 "]; затем экспортируйте EXTRA_LDFLAGS = -lresolv; fi ** перед вызовом './configure' с другими параметрами, и он успешно добавил -lresolv в Makefile. Я принимаю этот ответ, так как он указал мне в правильном направлении. Благодаря! –
Я должен отметить, что, приняв этот ответ, я обновил свой код, чтобы захватить основную версию ядра (в этом случае 10), используя 'uname -r | cut -d. -f 1' вместо этого. Это важно, потому что, хотя OS X 10.6.0 имеет версию ядра 10.0.0, OS X 10.6.2 имеет версию 10.2.0 и так далее. Теперь я сохраняю это значение '$ KERNEL_MAJOR' и использую' if [$ KERNEL_MAJOR -ge 10]; затем ... fi' для проверки на 10.6 и выше. –