Mặc dù giải pháp trong câu trả lời được chấp nhận hoạt động, nhưng đó không phải là cách đúng để khắc phục sự cố. Nó vi phạm tính toàn vẹn siêu dữ liệu của brew.
Vấn đề
Vấn đề là jpeg
công thức của Homebrew đã được nâng cấp lên v9 nhưng công thức PHP "đóng chai" hiện có vẫn được xây dựng và liên kết với phiên bản trước đó, v8, không còn tồn tại trên hệ thống của bạn.
Bạn có một số tùy chọn để khắc phục sự cố.
1. Biên dịch lại phpxx
công thức từ nguồn (rất khuyến khích)
Gỡ cài đặt công thức php của bạn và xây dựng lại nó từ nguồn thay vì sử dụng phiên bản đóng chai. Bằng cách này, php sẽ sử dụng và liên kết với phiên bản hiện được cài đặt của jpeg
. Giả sử rằng bạn đang xử lý php71
:
brew reinstall php71 --build-from-source
2. Hạ cấp jpeg
công thức đúng cách (ưu tiên hơn là biên dịch lại nó theo cách thủ công)
Nếu bạn chưa chạy brew cleanup
, bạn đã có jpeg
phiên bản trước đó trong hầm rượu của mình, hãy chuyển sang nó:
brew switch jpeg 8d
Nếu bạn gặp jpeg does not have a version "8d" in the Cellar.
lỗi, trước tiên bạn cần khôi phục nó bằng cách hoàn nguyên lịch sử:
cd $(brew --prefix)/Homebrew/Library/Taps/homebrew/homebrew-core
git checkout b231469
HOMEBREW_NO_AUTO_UPDATE=1 brew install jpeg
git checkout master
brew switch jpeg 8d
Bạn có thể tìm ra mã băm cam kết bằng cách sử dụng brew log jpeg
và xem qua các thông báo cam kết.
Nhược điểm là có thể có công thức khác mà đòi hỏi phiên bản mới hơn để làm việc đúng cách, ví dụ imagemagick
. Nếu bạn gặp phải các vấn đề không tương thích như vậy, hãy kiểm tra giải pháp đầu tiên ở trên.
3. Hạ cấp jpeg
bằng cách biên dịch lại theo cách thủ công (không được khuyến nghị)
Tìm nạp nguồn, biên dịch và ghi đè lên phiên bản của brew. Tham khảo câu trả lời của Denis để biết thêm chi tiết.
Điều này không được khuyến nghị vì nó vi phạm tính toàn vẹn của siêu dữ liệu bia của bạn. Brew nghĩ rằng nó có phiên bản 8b, tuy nhiên, bạn đã biên dịch thủ công 9b và ghi đè lên các tệp.
4. Liên kết biểu tượng phiên bản cũ theo cách thủ công (nghiêm túc chứ?)
Không liên kết biểu tượng thủ công còn lại libjpeg.8.dylib
. Nếu tệp ở đó, bạn có thể brew switch
truy cập nó như đã đề cập trong giải pháp thứ hai ở trên.
Đó chỉ là vụ hack tồi tệ nhất mà bạn có thể làm ở đây.
Những vấn đề như vậy cuối cùng sẽ được khắc phục .
brew doctor
và làbrew list
gì?