2009-07-30 30 views
5

Để 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.

Trả lời

4

Thử thêm -lresolv vào Makefile của bạn.

Hy vọng điều này sẽ hữu ích. Tôi đã nhận được đề xuất từ ​​số này discussion.

+0

Đó 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 ... –

+1

Đã 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! –

+0

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. –

2

Tôi khuyên bạn nên giải quyết các phụ thuộc bằng cách sử dụng fink/macports. Xây dựng tất cả các thành phần bằng cách sử dụng macports và sau đó biên dịch php từ nguồn trỏ thư mục lib sang/opt/...

Bạn thậm chí có thể xây dựng php trực tiếp từ nguồn bằng cách sử dụng macports.

+0

Thật không may, điều này là không khả thi, vì các tệp nhị phân được biên soạn phải ở một vị trí tùy chỉnh rất cụ thể (nghĩa là không có trong '/ opt') và có các phụ thuộc tối thiểu. Nói chung, mặc dù, một gợi ý tốt. –

2

Đối với những người không thể tìm ra nơi để thêm -lresolv :)

Sửa Makefile, tìm dòng:

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

và thêm -lresolv đến dòng này như thế này:

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

Làm việc cho tôi trên MacOS X 10.6 Snow Leopard trong khi biên dịch PHP cho LiteSpeed.

+0

Vâng, điều đó cũng sẽ hoạt động. Tôi đã thêm một bình luận vào câu trả lời được chấp nhận ở trên để thêm cờ này khi cần thiết trước đó ./configure được chạy và chỉ trên Snow Leopard. Một chút dễ dàng hơn (và tự động hóa hơn) hơn là tinh chỉnh tay. –

3

Nếu bạn đặt biến môi trường cấu hình trước khi chạy tập lệnh cấu hình, bạn không phải chỉnh sửa tệp makefile. Ví dụ:

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

Giải pháp này phù hợp với tôi.

Các vấn đề liên quan