dyld: Thư viện không được tải: /usr/local/lib/libjpeg.8.dylib - homebrew php


108

PHP không hoạt động với tôi vì tôi gặp sự cố libpng này , vì vậy tôi đã cài đặt lại phiên bản mới với Homebrew.

Tuy nhiên, lần này tôi gặp lỗi tương tự libjpeg:

$ php -v
dyld: Library not loaded: /usr/local/lib/libjpeg.8.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
Trace/BPT trap: 5

Bất kỳ đề xuất?


Đầu ra của brew doctorvà là brew listgì?
IKavanagh

Câu trả lời:


250

Theo đề xuất của @ jirson-tavera trong vấn đề repo homebrew-php , điều này có thể được khắc phục mà không cần ghi đè cài đặt bia của bạn:

wget -c http://www.ijg.org/files/jpegsrc.v8d.tar.gz
tar xzf jpegsrc.v8d.tar.gz
cd jpeg-8d
./configure
make
cp ./.libs/libjpeg.8.dylib /usr/local/opt/jpeg/lib

4
Ngoài ra có thể thêm một dòng lẻ cho dọn dẹp, điều này sẽ là câu trả lời được chấp nhận ...
Koen Betsens

Cũng làm việc cho tôi. Cảm ơn.
Adrian Lynch

Làm việc cho tôi là tốt. Chúc mừng.
Eduardo Leggiero

19
Thay vào đó, hãy cân nhắc thực hiện đúng cách .
sepehr

nhờ công trình, tôi đã cùng một vấn đề sau khi cài đặt RabbitMQ
Omar Makled

167

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à jpegcô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 phpxxcô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 jpegcô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ó jpegphiê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 jpegvà 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 jpegbằ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 switchtruy 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 .


4
Đây sẽ là câu trả lời được chấp nhận gần như tích cực.
Mike Legacy

Phương pháp đầu tiên phù hợp với tôi - tuy nhiên, tôi cũng phải chạy xcode-select --installtrước khi có thể cài đặt lại PHP 7.1 từ nguồn.
jrdn

Cách 2 không tìm thấy commit nữa, có thể do lực đẩy. Một cách giải quyết: thay vì git checkout b231469tôi đã làm curl https://raw.githubusercontent.com/Homebrew/homebrew-core/b23146936a3abb57aabb39017561e7b0c750abbf/Formula/jpeg.rb > Formula/jpeg.rb, sau đó thay vì git checkout mastertôi viết git checkout Formula/jpeg.rb.
tuomassalo

@tuomassalo Cảm ơn bạn đã chia sẻ cách giải quyết. Cam kết vẫn tồn tại trong bản sao cục bộ của tôi. Nếu đó là do bị ép buộc, bạn cũng không thể tìm nạp nó bằng cách sử dụng curl. Đối với tôi, có vẻ như bản sao cục bộ của bạn bằng cách nào đó không cập nhật với điều khiển từ xa 🤔.
sepehr

2
nếu git checkout b231469bị lỗi, sau đó thử này đầu tiêngit -C "$(brew --repo homebrew/core)" fetch --unshallow
Yoshi

13

Tôi gặp phải vấn đề tương tự ngày hôm nay. Nguyên nhân của sự cố là một phiên bản mới hơn của libjpeg. Và giải pháp hiệu quả là xây dựng phpchai từ nguồn.

Kiểm tra phiên bản có sẵn của libjpeg:

$brew info libjpeg
jpeg: stable 9b (bottled)
Image manipulation library
http://www.ijg.org
/usr/local/Cellar/jpeg/9b (20 files, 724KB) *
  Poured from bottle on 2017-08-07 at 12:06:42
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/jpeg.rb

Cài đặt phptừ nguồn:

brew install --build-from-source php56

Cập nhật :
Nếu bạn đã cài đặt, phpbạn phải gỡ cài đặt nó trước khi xây dựng từ nguồn. Nó cũng áp dụng cho các phần mở rộng.


vừa rồi ở đây - chính xác thì chuyện gì đã xảy ra? brew cập nhật libjpeg và bây giờ nó không có trong phiên bản phù hợp cho php5.6?
Toby

btw. kết quả câu trả lời của bạn: Cảnh báo: josegonzalez / php / php56 5.6.30_6 đã được cài đặt có lẽ nên gỡ bỏ nó trước? có vẻ đáng sợ: P
Toby

Có, bạn phải gỡ cài đặt phpvà các tiện ích mở rộng. Sau đó cài đặt phpvới --build-from-source. Tôi đã xem xét lịch sử git của libjpegcông thức và phiên bản của libjpegđã được cập nhật 9bvào ngày 5 tháng 8.
Paweł Wacławczyk

tốt nên điều này bằng cách nào đó đã phá vỡ nó ... tốt, biên dịch đã hoàn tất. có vẻ như nó hoạt động trở lại bây giờ - cảm ơn :)
Toby

Điều này cũng hoạt động cho PHP 7.1, chỉ cần gỡ cài đặt và sau đó chạy brew install --build-from-source php71. Vấn đề nảy sinh với tôi tối nay sau khi chạy brew upgrade.
Dwight

6

Tôi đã gặp vấn đề tương tự và tôi đã giải quyết nó bằng cách tải xuống manuallu libjpeg tarball từ đây và chạy:

tar zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
./configure --enable-shared --enable-static
make
sudo make install

sudo ranlib /usr/local/lib/libjpeg.a #Optionally

Đã khắc phục sự cố tương tự đối với tôi, mặc dù phiên bản được biên dịch bây giờ phải là v8d và các tệp libtool đó không tồn tại trên hệ thống của tôi (vẫn hoạt động).
Christoph Burschka

Đã khắc phục sự cố cho tôi. Cảm ơn!
Roni Laukkarinen

6

Tôi đã gặp sự cố tương tự khi cố gắng nâng cấp composer:

dyld: Thư viện không được tải: /usr/local/opt/jpeg/lib/libjpeg.8.dylib Được
tham chiếu từ: / usr / local / bin / php
Lý do: không tìm thấy hình ảnh
soạn thảo: Cần hỗ trợ PHP Phar cho công thức này
Lỗi: Một yêu cầu không được thỏa mãn đã không xây dựng được.

Vấn đề là phpkhông thể tìm thấy libjpegthư viện nữa. Một cách để khắc phục điều này là cài đặt lại phplibjpeg. Đây là cách tôi cài đặt lại chúng:

# find out which version of php is installed
brew list | grep php

# uninstall php
brew uninstall php70 --ignore-dependencies

# uninstall libjpeg
brew uninstall libjpeg --ignore-dependencies

# install libjpeg again
brew install libjpeg

# install php again
brew install php70

Sau đó tôi đã có thể nâng cấp lại mọi thứ :)

brew update && brew upgrade

🍻


6

Một giải pháp bẩn, phù hợp với tôi.

ln -s /usr/local/lib/libjpeg.9.dylib /usr/local/lib/libjpeg.8.dylib

5

Lệnh sau đã làm việc cho tôi.

brew switch libjpeg 8d

Điều này đã làm việc cho tôi. Tôi đã xem trong thư mục của mình bằng cách sử dụng ls /usr/local/Cellar/jpeg/và thấy hai thư mục con 8d9c Vì lỗi của tôi là do tôi dyld: Library not loaded: /usr/local/opt/jpeg/lib/libjpeg.8.dylibcố gắng tải sai.
TrophyGeek

4

Tôi đã không thử câu trả lời của Jirson, nhưng điều hiệu quả với tôi là:

brew uninstall libjpeg
brew install libjpeg

Bạn làm gì với tất cả các gói phụ thuộc vào libjpeg? Lỗi: Từ chối gỡ cài đặt / usr / local / Cellar / jpeg / 9b vì nó được yêu cầu bởi [SNIP] hiện đang được cài đặt.
Richard A Quadling

1
@RichardAQuadling Bạn có thể sử dụng --ignore-dependenciestùy chọn khi gỡ cài đặt.
sepehr

Điều này dường như không giải quyết được vấn đề cho tôi. Phiên bản jpeg mới nhất hiện tại là jpeg-9b. libjpeg.8.dylib vẫn bị thiếu sau khi làm theo hướng dẫn của @ gwg.
Gino

3

Tôi đang gặp vấn đề tương tự và điều duy nhất có ích là sử dụng --build-from-sourcetham số:

brew install php70 --build-from-source

2

Tôi cũng có vấn đề này. Tôi đã giải quyết nó theo cách này: Gỡ cài đặt jpeg / 8b:

brew uninstall --ignore-dependencies libjpeg

Gỡ cài đặt jpeg / 9b:

brew uninstall --ignore-dependencies jpeg

Gỡ cài đặt jpeg / 8b và 9b

Cài đặt lại jpeg / 9b

brew install jpeg

Cài đặt lại jpeg / 9b


ĐÃ LÀM VIỆC, Yeah !!
Husam

1

Tôi đang chia sẻ điều này vì tôi đã gặp vấn đề tương tự khi sử dụng PHP5.4. Ban đầu, tôi có PHP5.6 và nó đang hoạt động tốt. Sau đó, tôi đã hạ cấp xuống php5.4 vì ứng dụng của tôi chỉ hỗ trợ PHP5.4.

Sau đó, lỗi này xuất hiện. Tôi nhận thấy rằng tôi có libjpeg.9.dylibvà PHP5.4 đang tìm kiếm libjpeg.8.dylib.

Làm như sau đã sắp xếp vấn đề:

brew uninstall php54
brew install --build-from-source php54

0

Homebrew php đã được cập nhật và không còn là vấn đề với libjpeg


0

Như @lifecom lưu ý, điều này đã được khắc phục với bản cập nhật php70 của homebrew, nhưng bạn vẫn có thể gặp sự cố nếu brew upgradeđang cố gắng cập nhật các gói khác trước khi nâng cấp php70.

Khắc phục điều này bằng cách cập nhật php70 theo cách thủ công trước tiên brew upgrade php70và sau đó bạn sẽ có thể chạy brew upgrademà không có vấn đề gì (hoặc, tốt, ít nhất là không có vấn đề này ).



0

Trong một số trường hợp, đặc biệt là ở Catalina, thùng Homebrew cho gói có thể tồn tại nhưng không được liên kết đúng cách. Trong trường hợp đó, hãy thử:

brew link libjpeg
brew reinstall php --build-from-source
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.