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


284

Я установил нод с помощью 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, но проблема остается


Вы также установили php из Homebrew? Вы пытались переустановить php?
Ортомала Локни

1
Для потомков: удаление / переустановка пряжи / узла, кажется, делает свое дело.
Натаниэль Форд

12
согласно моему пониманию, это происходит, когда вы не соответствуете зависимостям версий. в моем случае команда "brew upgrade" исправила мои проблемы. Пожалуйста, поправьте меня, если я ошибаюсь.
sh6210

Ответы:


394

Примечание. Это обновит вашу версию PHP.

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

brew upgrade

Осторожно - это обновит все ваши варево пакеты. Если вы хотите обновить только определенные пакеты, убедитесь, что они указаны.

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

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

а потом

brew cleanup

40
Это было ... легко
Алан

7
Я думаю, что это не очень хорошая идея для тех, кто имеет среду с двумя версиями PHP, как я. Кроме того, обновление brew обновит вашу версию PHP, и это не обязательно хорошо, если ваша цель не обновить ваш PHP, а устранить ошибку библиотеки.
mpoletto

1
Это лучшее решение, которое я пробовал до сих пор, выбранный ответ не сработал
Alleo Indong

5
Я бы не стал этого делать, потому brew upgradeчто обновлю все ваши устаревшие пакеты brew, вместо этого, вероятно, сделайте только brew upgrade npmконкретный пакет или не все.
xgMz

2
@xgMz Ты прав насчет этого. Для меня мне было все равно, обновляю ли я все свои пакеты, но для кого-то, кто этого не хочет, это, вероятно, не очень хорошо. Я добавил примечание к своему решению. Спасибо!
Вим Дизель

280

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

 brew info icu4c
 brew switch icu4c <version>

Где versionустановленная версия возвращаетсяinfo


1
Это именно то, что случилось со мной, и вы сделали меня на правильном пути. Основным недостатком этого подхода является то, что вам необходимо предварительно установить эту версию. Я обошел это в своем ответе
Леланд

19
У меня не было установлено 62.1. brew list icu4cпоказал файлы из /usr/local/Cellar/icu4c/63.1. brew switch icu4c 63.1исправил это для меня.
Стивен Энсслен

3
Я нашел эту страницу после обнаружения этой ошибки в моих журналах Postgres. Я также пытался, brew switch icu4c 63.1но по-прежнему получаю ту же ошибку в журналах, даже после перезапуска postgres. Не уверен, что делать дальше ...
Эндрю

27
Я закончил тем, что бежал, brew reinstall postgresи это, казалось, решило мои проблемы
Эндрю

1
Помогает переключиться на icu4c 61.1. 63.1- не решить. 62.1- не найден.
Павел Петрович

82

Я на самом деле очень удивлен, что это решение еще не было представлено, и я чувствую, что это самое простое решение.

Перейдите на GitHub, найдите версию brewfile, которая соответствует версии, icu4cкоторая вам нужна, и получите сырую версию файла (перейдите по ссылкам выше и нажмите View Fileзатем Raw).

Затем просто переустановите варев с этого URL.

Например, версия 62.1:

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

Например, версия 64.2:

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

2
Вы спасатель жизни!
Брэд Кент

1
Это на самом деле лучшее решение, если, brew switch icu4c 62.1в первую очередь , не работает для вас.
саберпрашант

1
Это единственное, что сработало для меня после нескольких часов попыток исправить npm. Спасибо!
Галфишер

18
Работал отлично! Чтобы исправить ошибку, dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylibэта команда исправила это:brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/a806a621ed3722fb580a58000fb274a2f2d86a6d/Formula/icu4c.rb
Джон Кэри

2
Для icu4c 66 :brew reinstall https://raw.githubusercontent.com/Homebrew/homebrew-core/22fb699a417093cd1440857134c530f1e3794f7d/Formula/icu4c.rb
Магнус W

70

Оказывается, мне, как @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 . Очистите свой измененный рецепт.

Когда я делаю brew log icu4c, есть только 3-4 результата. Отсутствует упоминание 62.1. Хэш, который вы используете выше, тоже не работает. Они удалили 62?
Ной

2
Сначала вы git -C (brew --repo homebrew/core) fetch --unshallowдолжны убедиться, что у вас есть полная история git.
Ноя

44
Так много драмы для обновления пряжи.
Эрик Уокер,

4
Это единственное решение, которое сработало для меня, спасибо! В моем случае проблема была в пакете ffmpeg, на котором, я полагаю, была установлена ​​более новая версия icu4c. Не работало ни обновление, ни обновление brew, ни переустановка, и перекомпоновка, сборка php из исходного кода.
Gedijedi

5
В моем случае мне понадобился icu4c v63, поэтому соответствующий коммит для извлечения: bc0c97952453ff6afc146aa3a706e9902aba4300 . Команда git есть git checkout bc0c97952453ff6afc146aa3a706e9902aba4300 -- Formula/icu4c.rbи затемbrew switch 63.1
nahuelhds

39

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

brew reinstall php@7.1

Добавлено 14 марта на основании комментария Райана

получите версию, которую вы используете в данный момент, запустив php -vи получите правильные формулы (которые вы можете найти здесь: https://formulae.brew.sh/formula/php ) для замены @7.1в приведенной выше команде.


8
Я получил ту же ошибку при nodeобновлении MacOS до 10.14.2, это brew reinstall nodeбыл билет для меня тоже
gnmerritt

Я начал получать эту ошибку после установки нового пакета с brew. Делать brew upgradeэто исправил для меня.
Самурай Джек

1
brew reinstall phpможет в конечном итоге установить другую версию, чем текущая. Возможно, вам придется указать версию с помощьюphp@7.1
Райан

3
Вы не можете получить текущую версию, запустив ее, php -vесли ваш php не работает: p
gingerCodeNinja

1
@gingerCodeNinja это правда, возможно, это может помочь: для Mac OS перейдите к терминалу и запустите echo $PATH(если у вас есть php, вы должны увидеть что-то вроде этого :), /usr/local/opt/php@7.2/binэто один из способов узнать, какие версии используются в настоящее время.
Арун Карнати

34

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

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

кредиты


15

Это исправило это для меня:

brew upgrade node

1
Это сработало и для меня. Я никогда полностью не исследовал это, но я думаю, что brew только что исправил зависимости при обновлении узла. Это чувствуется гораздо более сдержанным по сравнению с улучшением варки.
Хендрикбек

1
похоже, похожий случай,> «узел переустановки brew» помог мне после перехода на Catalina
greencrest

9

Просто 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 )

5

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

  1. Загрузите и скомпилируйте icu4c62.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

1
Я использую PHP 7.1, и это было единственное, что сработало для меня.
WebTigers

В моем случае мне понадобилась версия 64.2, поэтому я скачал ее с github.com/unicode-org/icu/releases/download/release-64-2/…
RafaelQm



2

Для меня brew reinstall nodejsэто было исправлено - моя проблема была с запуском Elixir / Phoenix, поэтому не по PHP, я думаю, что это было вызвано brew install postgres, но переустановка, которая не помогла. Я получал это от npmкоманд.



2

Это то, что, наконец, сработало для меня.

brew reinstall postgres

После запуска вышеуказанной команды вам может понадобиться

brew postgresql-upgrade-database

чтобы получить доступ к вашим предыдущим данным.


После попыток, прежде всего, только это сработало для меня.
Крипалу Сар

1

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

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

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

Я также сделал brew link --force php@7.2для моей среды.


Пробовал это, но без улучшения; Однако brew switch icu4c 62.1команда Серых Черных сработала для меня.
Джейми Берч

1

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

4) git checkout -B icu4c-62.1 575eb4b

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


1

Чтобы понизить версию, мне пришлось перекомпилировать из исходного кода (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



0

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

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

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


Разве это не покрыто другими ответами?
JJ за прозрачность и Монику

ИМО, нет. Один ответ говорит о перекомпиляции, и что я должен сделать, это «обновить».
Дэвид Фернандес Рафаэль

Я получил эту ошибку и после обновления с неофициального репозитория, но узел brew upgrade ее исправил.
user3685048


-1

в моем случае я переустанавливаю все пакеты, установленные с помощью Homebrew

$ brew list | xargs brew reinstall

После этого я начинаю устанавливать нужную мне версию

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.