it-roy-ru.com

dyld: библиотека не загружена: /usr/local/opt/icu4c/lib/libicui18n.62.dylib ошибка при запуске php afeter при установке узла с brew на Mac

Я установил узел с помощью homebrew (Mojave), после чего php перестал работать, и если я пытаюсь запустить php -v, я получаю эту ошибку:

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

Я пытался удалить оба узла и icu4c, но проблема остается

18
petekaner

В моем случае это произошло из-за того, что icu4c был обновлён до версии 63, но мой локально установленный образ postgres все еще ссылался на icu4c 62.1. Поэтому мне пришлось изменить используемую версию icu4c:

 brew switch icu4c 62.1
22
Grey Black

У меня была такая же проблема после того, как я обновил свой macOS до версии 10.13.6. Я не могу запустить команды composer и php. После некоторого исследования и опробования различных решений, размещенных в Интернете, переустановка php с помощью homebrew сработала. 

brew reinstall php

11
Arun Karnati

Оказывается, мне, как @Grey Black, пришлось фактически установить v62.1 из icu4c. Больше ничего не получалось.

Тем не менее, brew switch icu4c 62.1 работает, только если вы установили 62.1 в прошлом. Если у вас нет, там больше работы. Homebrew делает не облегчает установку предыдущие версии формул. 

Вот как я это сделал:

  1. Сначала нам нужен глубокий клон Homebrew репо. Это может занять некоторое время: git -C (brew --repo homebrew/core) fetch --unshallow
  2. brew log icu4c для отслеживания коммита, который ссылается на 62.1; 575eb4b делает трюк.
  3. cd $(brew --repo homebrew/core)
  4. git checkout 575eb4b -- Formula/icu4c.rb
  5. brew uninstall --ignore-dependencies icu4c
  6. brew install icu4c Теперь у вас должна быть правильная версия зависимости! Теперь просто ...
  7. git reset && git checkout . Очистите ваш измененный рецепт.

Добавил пару дополнительных заметок, спасибо @Noah за улов

7
Leland

Запустите npm version и посмотрите, видите ли вы ту же ошибку.

Если это так, обновите версию своего узла 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

Кредиты

2
Lucas Bustamante

Просто brew remove php и brew install php не работали, и не brew reinstall php. Мое решение было сделать:

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

Теперь php -v дает мне:

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

У меня была такая же проблема, и обновление домашнего варки, а затем уборка работали на меня. Эта ошибка, вероятно, обнаружилась для меня из-за несоответствия версий пакета. Ни одно из вышеперечисленных решений не устранило мою ошибку.

brew upgrade

а потом

brew cleanup
1
Jase

Ответ Леланда сработал для меня, но мне пришлось изменить шаги 4 и 6 на:

4) git checkout -B icu4c-62.1 575eb4b

6) заварить переустановить формулу/icu4c.rb

0
sgrwg

Получил эту ошибку тоже после установки php 7.3. У меня было решено обновить только мои старые версии PHP (5.6 и 7.0, а не из официальных репозиториев).

Сопровождающие скомпилировали новые версии php для текущей версии icu4c.

В моем случае PHP 7 получил от 0,31 до 0,33, и проблема была решена.

0
David Fernández Rafael

Похоже, невозможно связать icu4c с помощью brew после последнего обновления OS X. Что делает вещи более интересными. Единственное решение, которое я нашел для меня:

  1. Загрузите и скомпилируйте icu4c 62.1 в /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. Ссылка libs:
ln -s /usr/local/icu4c/62.1/lib/*.dylib /usr/local/include/
  1. Установите DYLD_LIBRARY_PATH в ~/.bash_profile:
export DYLD_LIBRARY_PATH=/usr/local/include

Надеюсь, это сэкономит несколько часов вашего времени.

0
Serhey Dolgushev

Вместо того, чтобы устанавливать старую версию icu4c, на которую может ссылаться старый (предварительно скомпилированный) php, лучше перекомпилировать старый php для ссылки на более новую библиотеку.

brew uninstall [email protected]
brew install --build-from-source [email protected]

Это соберет php и свяжет его с новой библиотекой. Я обнаружил, что reinstall не совсем работает; новая установка захлебнулась, когда папка назначения уже существовала.

Я также сделал brew link --force [email protected] для своей среды.

0
Jerry