Để bắt đầu, tôi thường chọn sử dụng nhị phân PHP đã biên dịch trước, nhưng bắt buộc phải xây dựng từ nguồn cho nhu cầu kinh doanh cụ thể. (Tôi không phải là loại biên dịch các ứng dụng nguồn mở chỉ dành cho các cú đá.)Lỗi liên kết libresolv khi xây dựng PHP 5.2.10 từ nguồn trên OS X
Tôi đang xây dựng trên OS X 10.6 và đang chạy vào lỗi sau đây khi tôi cố gắng make
PHP 5.2.10 làm mô-đun 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
Những biểu tượng là một phần của libresolv
, được bao gồm ở /usr/lib/libresolv.dylib
trên OS X (và đã được kể từ ít nhất 10.4). Lưu ý rằng các tệp *.dylib
tương đương với Mac là *.so
tệp trên Linux và tôi đã biên dịch thành công theo số libiconv.dylib
bằng cách chuyển --with-iconv=shared,/usr
đến ./configure
, loại bỏ các lỗi liên kết tương tự cho thư viện iconv
.
Khi tôi chạy ./configure
, nó phát hiện /usr/include/resolv.h
và bật nó trong makefile. Tuy nhiên, tôi không thể tìm ra cách để có được thư viện được chia sẻ để liên kết chính xác. Bất kỳ lời khuyên về việc đó để làm việc? Tôi đã không bao giờ làm bất cứ điều gì giống như chuyển cờ tùy chỉnh liên kết đến ./configure
và Google không giúp gì cho tôi về vấn đề này, thật không may.
Edit: Tôi đang xây dựng từ this TAR download nếu có ai muốn cố gắng để nhân rộng các lỗi trên Snow Leopard.
Đó là một khách hàng tiềm năng tốt. Tôi chỉ chạy kịch bản biên dịch của tôi trên một máy tính với 10.5 và nó được xây dựng tốt, vì vậy đây chắc chắn là một vấn đề mới đối với Snow Leopard. Thật không may, tôi đang gặp khó khăn trong việc tìm ra nơi để thêm '-lresolv' trong Makefile. (Sẽ tốt hơn nếu tôi có thể làm một cái gì đó như thiết lập một biến môi trường và có './ configure' thêm nó cho tôi.) MacPorts sử dụng định dạng portfile của riêng mình, vì vậy nó không phải là rất hữu ích cho chi tiết cụ thể, không may ... –
Đã tìm ra. Tôi đã thêm ** nếu ['uname -r' ==" 10.0.0 "]; sau đó xuất EXTRA_LDFLAGS = -lresolv; fi ** trước khi gọi './configure' với các tùy chọn khác và nó đã thêm thành công -lresolv vào Makefile. Tôi chấp nhận câu trả lời này vì nó chỉ cho tôi đi đúng hướng. Cảm ơn! –
Tôi nên lưu ý rằng kể từ khi chấp nhận câu trả lời này, tôi đã cập nhật mã của mình để lấy phiên bản chính của hạt nhân (10 trong trường hợp này) bằng cách sử dụng 'uname -r | cắt -d -f 1'. Điều này quan trọng bởi vì mặc dù OS X 10.6.0 có phiên bản kernel 10.0.0, OS X 10.6.2 có phiên bản 10.2.0, v.v. Bây giờ tôi lưu giá trị này vào '$ KERNEL_MAJOR' và sử dụng' if [$ KERNEL_MAJOR -ge 10]; sau đó ... fi' để kiểm tra 10.6 hoặc cao hơn. –