Na początek chciałbym normalnie zdecydować się na stosowanie wstępnie skompilowana binarnego PHP, ale mam obowiązek budować od źródła do konkretnej potrzeby biznesu. (Nie jestem typem, który kompiluje aplikacje typu open source tylko do kopnięć.)Błędy łączące libresolv przy budowie PHP 5.2.10 ze źródła na OS X
Buduję na OS X 10.6 i napotykam następujący błąd, gdy próbuję wykonać make
PHP 5.2.10 jako moduł 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
symbole te są częścią libresolv
, który jest zawarty w /usr/lib/libresolv.dylib
na OS X (i jest od przynajmniej 10.4). Zauważ, że pliki *.dylib
są odpowiednikami Macintosha plików *.so
na Linuksie. Udało mi się już skompilować libiconv.dylib
, przekazując --with-iconv=shared,/usr
do ./configure
, co wyeliminowało podobne błędy linkera dla biblioteki iconv
.
Po uruchomieniu ./configure
wykrywa /usr/include/resolv.h
i włącza go w pliku Makefile. Jednak nie wydaje mi się, aby dowiedzieć się, jak poprawnie podłączyć bibliotekę współdzieloną. Wszelkie wskazówki, jak to zrobić? Nigdy nie zrobiłem nic takiego, jak przekazanie niestandardowych flag linkerów do ./configure
, a Google niestety nie pomogło mi w rozwiązaniu tego problemu.
Edit: buduję od this TAR download jeśli ktoś chce spróbować powtórzyć błąd na Snow Leopard.
To dobra przewaga. Właśnie uruchomiłem mój skrypt kompilacyjny na maszynie z wersją 10.5 i wszystko dobrze, więc jest to zdecydowanie nowy problem w Snow Leopard. Niestety, mam problem z ustaleniem, gdzie dodać '-lresolv' w pliku Makefile. (Byłoby jeszcze lepiej, gdybym mógł zrobić coś jak ustawić zmienną środowiskową i mieć './ configure' dodaj to dla mnie.) MacPorts używa własnego formatu portfeli, więc nie jest zbyt pomocny dla szczegółów, niestety ... –
Wyliczyłem to. Dodałem **, jeśli ['uname -r' ==" 10.0.0 "]; następnie wyeksportuj EXTRA_LDFLAGS = -lresolv; fi ** przed wywołaniem './configure' z innymi opcjami i pomyślnie dodała -lresolv do Makefile. Przyjmuję tę odpowiedź, ponieważ skierowała mnie we właściwym kierunku. Dzięki! –
Należy zauważyć, że od czasu zaakceptowania tej odpowiedzi zaktualizowałem swój kod, aby pobrać główną wersję jądra (w tym przypadku 10) używając 'uname -r | wyciąć -d. Zamiast tego -f 1'. Jest to ważne, ponieważ chociaż OS X 10.6.0 ma wersję jądra 10.0.0, OS X 10.6.2 ma wersję 10.2.0 i tak dalej. Teraz przechowuję tę wartość na '$ KERNEL_MAJOR' i używam' if [$ KERNEL_MAJOR -ge 10]; następnie ... fi' sprawdzić 10,6 lub więcej. –