dyld: Thư viện không được tải: /usr/local/opt/icu4c/lib/libicui18n.62.dylib lỗi chạy php sau khi cài đặt nút với brew trên Mac


282

Tôi đã cài đặt nút bằng homebrew (Mojave), sau đó php ngừng hoạt động và nếu tôi cố chạy php -vtôi gặp lỗi này:

php -v
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found

Tôi đã cố gắng gỡ cài đặt cả nút và icu4c nhưng sự cố vẫn còn


Bạn cũng đã cài đặt php từ Homebrew? Bạn đã thử cài đặt lại php?
Ortomala Lokni

1
Đối với hậu thế: gỡ cài đặt / cài đặt lại sợi / nút dường như thực hiện thủ thuật.
Nathaniel Ford

12
Theo hiểu biết của tôi, điều này xảy ra khi bạn phụ thuộc phiên bản không khớp. trong trường hợp của tôi, lệnh "nâng cấp bia" đã khắc phục các sự cố của tôi. xin vui lòng sửa cho tôi, nếu tôi sai trong bất kỳ cách nào.
sh6210

Câu trả lời:


391

Lưu ý - Điều này sẽ nâng cấp phiên bản PHP của bạn.

Tôi chỉ có vấn đề tương tự. Nâng cấp Homebrew và sau đó dọn dẹp làm việc cho tôi. Lỗi này có thể xuất hiện cho tôi vì sự không phù hợp trong các phiên bản gói. Không có giải pháp nào ở trên giải quyết được lỗi của tôi, nhưng việc chạy các lệnh homebrew sau đây đã làm.

brew upgrade

Thận trọng - Điều này sẽ nâng cấp tất cả các gói bia của bạn. Nếu bạn chỉ muốn nâng cấp các gói cụ thể, hãy đảm bảo là cụ thể.

brew upgrade // for upgrading all packages -- this is the command I used

brew upgrade {package} // for upgrading a specific package

và sau đó

brew cleanup

40
Điều đó thật ... dễ dàng
Alan

7
Tôi nghĩ rằng đây không phải là một ý tưởng tốt cho những người có môi trường với hai phiên bản PHP như tôi. Ngoài ra, nâng cấp brew sẽ nâng cấp phiên bản PHP của bạn và điều này không cần thiết nếu mục tiêu của bạn không phải là nâng cấp PHP, mà là giải quyết lỗi thư viện.
mpoletto

1
Đây là giải pháp tốt nhất mà tôi đã thử cho đến nay, câu trả lời được chọn không hoạt động
Alleo Indong

5
Tôi sẽ không làm điều này bởi vì brew upgradesẽ nâng cấp tất cả các gói lỗi thời của bạn, thay vào đó, có lẽ chỉ làm brew upgrade npmhoặc một gói cụ thể, không phải tất cả.
xgMz

2
@xgMz Bạn nói đúng về điều này. Đối với tôi, tôi không quan tâm nếu tôi đang cập nhật tất cả các gói của mình, nhưng đối với ai đó không muốn, thì điều đó có lẽ không tuyệt vời. Tôi đã thêm một lưu ý cho giải pháp của tôi. Cảm ơn!
Vim Diesel

279

Trong trường hợp của tôi, điều đó đã xảy ra vì icu4c đã được nâng cấp lên phiên bản 63 nhưng hình ảnh postgres được cài đặt cục bộ của tôi vẫn được tham chiếu icu4c 62.1. Vì vậy, tôi đã phải thay đổi phiên bản icu4c được sử dụng:

 brew info icu4c
 brew switch icu4c <version>

Trong trường hợp versionlà các phiên bản cài đặt được trả về bởiinfo


1
Đây chính xác là những gì đã xảy ra với tôi, và bạn đã đưa tôi đi đúng hướng. Nhắc nhở chính cho phương pháp này là bạn phải cài đặt phiên bản này trước đó. Tôi đã giải quyết vấn đề này trong câu trả lời của mình
Leland

19
Tôi chưa cài đặt 62.1. brew list icu4ccho thấy một tập tin từ /usr/local/Cellar/icu4c/63.1. brew switch icu4c 63.1sửa nó cho tôi
Steven Ensslen

3
Tôi tìm thấy trang này sau khi tìm thấy lỗi này trong nhật ký Postgres của tôi. Tôi cũng đã thử brew switch icu4c 63.1nhưng vẫn nhận được lỗi tương tự trong nhật ký, ngay cả sau khi khởi động lại postgres. Không biết phải làm gì tiếp theo ...
Andrew

27
Cuối cùng tôi đã chạy brew reinstall postgresvà điều đó dường như giải quyết vấn đề của tôi
Andrew

1
Giúp chuyển sang icu4c 61.1. 63.1- không giải quyết được. 62.1- không tìm thấy.
Pavel Petrovich

82

Tôi thực sự khá ngạc nhiên khi giải pháp này chưa được trình bày và tôi cảm thấy đây là giải pháp đơn giản nhất.

Truy cập GitHub, tìm phiên bản của brewfile phù hợp với phiên bản icu4cmà bạn cần và lấy phiên bản thô của tệp (theo các liên kết ở trên và nhấp vào View Filesau đó Raw).

Sau đó, chỉ cần cài đặt lại bia từ url đó.

Ví dụ 62.1: phiên bản :

brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/575eb4bbef683551e19f329f60456b13a558132f/Formula/icu4c.rb

Ví dụ 64.2: phiên bản :

brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb

2
bạn là một người cứu rỗi cuộc sống
Brad Kent

1
Đây thực sự là giải pháp tốt nhất nếu, brew switch icu4c 62.1không làm việc cho bạn trong trường hợp đầu tiên.
saberprashant

1
Đây là điều duy nhất làm việc cho tôi sau nhiều giờ cố gắng sửa npm. Cảm ơn!
kẻ lừa đảo

18
Làm việc tuyệt vời! Để sửa lỗi dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib, lệnh này đã sửa nó:brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
John Kary

2
Đối với icu4c 66 :brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb
Magnus W

70

Hóa ra tôi, như @Grey Black, đã thực sự phải cài đặt v62.1 của icu4c. Không có gì khác làm việc.

Tuy nhiên, brew switch icu4c 62.1chỉ hoạt động nếu bạn đã cài đặt 62.1 trong quá khứ. Nếu bạn không có nhiều công việc liên quan. Homebrew không giúp bạn dễ dàng cài đặt các phiên bản công thức trước đó.

Đây là cách tôi đã làm:

  1. Trước tiên chúng ta cần một bản sao sâu sắc của repo Homebrew. Việc này có thể mất một lúc:git -C $(brew --repo homebrew/core) fetch --unshallow
  2. brew log icu4cđể theo dõi một cam kết tham chiếu 62.1; 575eb4bkhông lừa
  3. cd $(brew --repo homebrew/core)
  4. git checkout 575eb4b -- Formula/icu4c.rb
  5. brew uninstall --ignore-dependencies icu4c
  6. brew install icu4cBây giờ bạn nên có phiên bản chính xác của sự phụ thuộc! Bây giờ chỉ để ...
  7. git reset && git checkout . Dọn dẹp công thức sửa đổi của bạn.

Khi tôi làm brew log icu4c, chỉ có 3-4 kết quả. Không đề cập đến 62.1. Hàm băm bạn sử dụng ở trên cũng không hoạt động. Họ đã loại bỏ 62?

2
Trước tiên bạn nên làm git -C (brew --repo homebrew/core) fetch --unshallowđể đảm bảo rằng bạn có một lịch sử bia đầy đủ.

44
Quá nhiều kịch tính cho một nâng cấp sợi.
Eric Walker

4
Đây là giải pháp duy nhất hiện có cho tôi, cảm ơn bạn! Trong trường hợp của tôi, vấn đề là gói ffmpeg, mà tôi giả sử, đã cài đặt phiên bản mới hơn của icu4c. Không cập nhật, nâng cấp brew hoạt động, cũng không cài đặt lại, phát lại, xây dựng php từ nguồn.
gedijedi

5
Trong trường hợp của tôi, tôi cần icu4c v63, vì vậy cam kết thanh toán liên quan là bc0c97952453ff6afc146aa3a706e9902aba4300 . Lệnh git là git checkout bc0c97952453ff6afc146aa3a706e9902aba4300 -- Formula/icu4c.rbvà sau đóbrew switch 63.1
nahuelhds

39

Tôi đã có cùng một vấn đề sau khi tôi nâng cấp macOSlên phiên bản 10.13.6. Tôi không thể chạy composerphpra lệnh. Sau khi nghiên cứu một lúc và thử các giải pháp khác nhau được đăng trực tuyến, cài đặt lại php bằng cách sử dụng homebrew.

brew reinstall php@7.1

Đã thêm vào ngày 14 tháng 3 dựa trên nhận xét của Ryan

lấy phiên bản bạn hiện đang sử dụng bằng cách chạy php -vvà lấy đúng công thức (mà bạn có thể tìm thấy ở đây: https://formulae.brew.sh/formula/php ) để thay thế @7.1trong lệnh trên.


8
Tôi cũng gặp lỗi tương tự nodesau khi nâng cấp macOS 10.14.2, đó brew reinstall nodelà vé cho tôi
gnmerritt

Tôi bắt đầu gặp lỗi này sau khi cài đặt gói mới với brew. Làm brew upgradenó cố định cho tôi.
samurai jack

1
brew reinstall phpcuối cùng có thể cài đặt một phiên bản khác với phiên bản hiện tại. Bạn có thể phải chỉ định phiên bản bằng cách sử dụngphp@7.1
Ryan

3
bạn không thể có được phiên bản hiện tại bằng cách chạy php -vnếu php của bạn bị hỏng: p
gingerCodeNinja

1
@gingerCodeNinja là đúng, có lẽ điều này có thể giúp: đối với Mac OS, hãy truy cập terminal và chạy echo $PATH(nếu bạn có php, bạn sẽ thấy một cái gì đó như thế này /usr/local/opt/php@7.2/bin:) đây là một cách để tìm hiểu phiên bản nào hiện đang được sử dụng.
Arun Karnati

33

Chạy npm versionvà xem nếu bạn thấy lỗi tương tự.

Nếu vậy, nâng cấp phiên bản npm của bạn brew upgrade npm.

==> Upgrading 1 outdated package, with result:
npm 8.1.2 -> 10.3.0
==> Upgrading npm
==> Installing dependencies for node: icu4c
==> Installing node dependency: icu4c

Tín dụng


15

CÁi này đã sửa nó giúp tôi:

brew upgrade node

1
Cái này cũng có tác dụng với tôi. Tôi chưa bao giờ điều tra đầy đủ về nó nhưng tôi tin rằng brew chỉ sửa lỗi phụ thuộc trong khi nâng cấp nút. Điều này cảm thấy nhiều hơn so với nâng cấp bia.
hendrikbeck

1
có vẻ như trường hợp tương tự,> 'nút cài đặt lại bia' đã giúp tôi sau khi chuyển sang Catalina
greencrest

9

Chỉ brew remove phpbrew install phpkhông làm việc, cũng không làm brew reinstall php. Giải pháp của tôi là làm:

brew remove php
cd /usr/local/Cellar
rm -rf php/
brew install php
brew doctor
brew cleanup

Bây giờ php -vđưa cho tôi:

PHP 7.3.2 (cli) (built: Feb 14 2019 10:08:45) ( NTS )

5

Có vẻ như không thể liên kết icu4cbằng cách sử dụng brewsau khi cập nhật OS X mới nhất. Mà làm cho mọi thứ thú vị hơn. Giải pháp duy nhất tôi tìm thấy làm việc cho tôi:

  1. Tải xuống và biên dịch icu4c62.1 thành/usr/local/icu4c/62.1
mkdir ~/sources
cd ~/sources
wget http://download.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz
tar xvzf icu4c-62_1-src.tgz
cd icu/source/

sudo mkdir /usr/local/icu4c/62.1
./configure --prefix=/usr/local/icu4c/62.1
make
sudo make install
  1. Liên kết libs:
ln -s /usr/local/icu4c/62.1/lib/*.dylib /usr/local/include/
  1. Đặt DYLD_LIBRARY_PATHtrong ~/.bash_profile:
export DYLD_LIBRARY_PATH=/usr/local/include

1
Tôi đang chạy PHP 7.1 và đây là điều duy nhất phù hợp với tôi.
WebTigers

Trong trường hợp của tôi, tôi cần phiên bản 64.2, vì vậy tôi đã tải xuống từ github.com/unicode-org/icu/release/doad/release-64-2/
Lỗi

3

Trên MacOS Mojave, cách duy nhất tôi có thể khắc phục là với brew upgrade



2

Đối với tôi đã brew reinstall nodejskhắc phục điều này - vấn đề của tôi là do chạy Elixir / Phoenix nên không phải là PHP cụ thể, tôi nghĩ rằng đó là do brew install postgres, nhưng cài đặt lại không giúp được gì. Tôi đã nhận được nó từ npmcác lệnh.


2

brew update && brew upgrade đã làm cho tôi


Chào mừng đến với SO! Sự hợp tác của bạn được chào đón. Trong trường hợp này, có thêm 15 câu hỏi nữa nên sẽ là một điểm tốt để thể hiện Ưu điểm của bạn.
David García Bodego

1

Thay vì cài đặt một phiên bản cũ icu4cmà php cũ (được biên dịch trước) có thể liên kết đến, tốt hơn là nên biên dịch lại php cũ để liên kết đến thư viện gần đây hơn.

brew uninstall php@7.2
brew install --build-from-source php@7.2

Điều này sẽ xây dựng php và liên kết nó với thư viện mới hơn. Tôi thấy reinstallkhông hiệu quả lắm; cài đặt mới bị nghẹn khi thư mục đích đã tồn tại.

Tôi cũng đã làm brew link --force php@7.2cho môi trường của tôi.


Đã thử điều này nhưng không cải thiện; brew switch icu4c 62.1Lệnh của Grey Black làm việc cho tôi, tuy nhiên.
Jamie Birch

1

Câu trả lời của Leland có tác dụng với tôi, nhưng tôi phải thay đổi bước 4 và 6 thành:

4) kiểm tra git -B icu4c-62.1 575eb4b

6) ủ lại công thức / icu4c.rb


1

Để hạ cấp, tôi phải biên dịch lại từ nguồn (MacOS Mojave)

$ wget https://ssl.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz
$ tar xvfz icu4c-62_1-src.tgz
$ cd icu/sources
$ ./configure
$ make
$ make install



1

Đây là những gì cuối cùng đã làm việc cho tôi.

brew reinstall postgres

Sau khi chạy lệnh trên, bạn có thể cần phải chạy

brew postgresql-upgrade-database

để truy cập dữ liệu trước đó của bạn.


Sau khi thử trên tất cả, chỉ có điều này làm việc cho tôi.
Kripalu Sar

0

Cũng gặp lỗi này, sau khi cài đặt php 7.3. Tôi đã giải quyết việc nâng cấp chỉ các phiên bản php cũ của tôi (5.6 và 7.0, không phải từ các bản chính thức).

Các nhà bảo trì đã biên dịch các phiên bản php mới so với icu4c hiện tại.

Trong trường hợp của tôi, PHP 7 có từ 0,31 đến 0,33 và vấn đề đã được giải quyết.


Điều này không được bao phủ bởi các câu trả lời khác?
JJ cho Minh bạch và Monica

IMO, không. Một câu trả lời nói về việc biên dịch lại, và những gì tôi phải làm là "cập nhật".
David Fernández Rafael

Tôi cũng gặp lỗi này sau khi nâng cấp từ một repo không chính thức nhưng nút nâng cấp brew đã sửa nó.
dùng3685048

0

Giải pháp trong ý chính này đã làm điều đó cho tôi

brew uninstall --ignore-dependencies node icu4c
brew install node

-1

trong trường hợp của tôi, tôi cài đặt lại tất cả các gói được cài đặt với Homebrew

$ brew list | xargs brew reinstall

Sau đó, tôi bắt đầu cài đặt phiên bản của mình mà tôi cần

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.