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


280

Я встановив вузол за допомогою 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

Відповіді:


388

Примітка. Це оновить вашу PHP-версію.

У мене просто була ця сама проблема. Оновлення домашньої мови, а потім прибирання працювали для мене. Ця помилка, ймовірно, виявилася для мене через невідповідність версій пакета. Жодне з вищезазначених рішень не вирішило мою помилку, але запуск наступних команд 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, як я. Крім того, оновлення пивоварення оновить вашу PHP-версію, і це не обов'язково добре, якщо ваша мета - не оновити PHP, а вирішити помилку бібліотеки.
mpoletto

1
Це найкраще рішення, яке я спробував поки що, вибрана відповідь не спрацювала
Аллео Індонг

5
Я б не робив цього, тому що brew upgradeоновив би всі ваші застарілі пакети, натомість, мабуть, лише brew upgrade npmчи певний пакет, не всі.
xgMz

2
@xgMz Ви маєте рацію з цим. Для мене мені було байдуже, чи я оновлював усі свої пакунки, але для когось, хто цього не хоче, то, мабуть, це не чудово. Я додав замітку до свого рішення. Дякую!
Vim Diesel

278

У моєму випадку це сталося тому, що icu4c було оновлено до версії 63, але на мій локально встановлений постгреш образ все ще посилався на icu4c 62.1. Тому мені довелося змінити використану версію icu4c:

 brew info icu4c
 brew switch icu4c <version>

Куди versionповертається встановлена ​​версіяinfo


1
Саме так сталося і зі мною, і ти мене вивів на правильний шлях. Основним застереженням цього підходу є те, що ви повинні попередньо встановити цю версію. Я працював над цим у своїй відповіді
Leland

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- не знайдено.
Павло Петрович

81

Я насправді дуже здивований, що це рішення ще не було представлено, і я вважаю, що це найпростіше рішення.

Перейти до 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
Magnus W

70

Виявляється, мені, як @Grey Black, довелося фактично встановити v62.1 icu4c. Нічого іншого не працювало.

Однак brew switch icu4c 62.1працює лише в тому випадку, якщо ви раніше встановили 62.1. Якщо у вас немає більше ніжних робіт. Homebrew не спрощує встановлення попередніх версій формул.

Ось як я це зробив:

  1. Спочатку нам потрібен глибокий клон репо-домашньої мови. Це може зайняти деякий час: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. Ні оновлення, модернізація варіння не працювала, ні перевстановлення, повторне посилання, створення 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
запустівши,

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

33

Запустіть 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
Це працювало і для мене. Я ніколи не повністю досліджував це, але вважаю, що пивоварення просто виправляло залежності також під час оновлення вузла. Це відчувало набагато більше у порівнянні з оновленням варіння.
hendrikbeck

1
Здається, схожий випадок,> "заварювати перевстановити вузол" мені допомогли після переходу на
Каталіну

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. Link 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 update && brew upgrade працював на мене


Ласкаво просимо до SO! Ваша співпраця вітається. У цьому випадку є ще 15 запитань, тож буде хорошим моментом показати ваші плюси.
Девід Гарсія Бодего

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 -B icu4c-62,1 575eb4b

6) заваріть перевстановлення Formula / 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



1

Це те, що нарешті спрацювало для мене.

brew reinstall postgres

Після виконання вищевказаної команди вам може знадобитися запустити

brew postgresql-upgrade-database

для доступу до попередніх даних.


Спробувавши понад усе, тільки це працювало для мене.
Крипалу Сар

0

Отримала цю помилку і після установки php 7.3. У мене було вирішено оновити лише мої старі версії php (5.6 та 7.0, не з офіційних репостів).

Обслуговувачі склали нові версії php для поточного icu4c.

У моєму випадку PHP 7 отримав від 0,31 до 0,33, і проблема була вирішена.


Чи це не стосується інших відповідей?
JJ для прозорості та Моніки

ІМО, ні. Одна відповідь говорить про перекомпіляцію, і що я повинен зробити, це "оновити".
Девід Фернандес Рафаель

Цю помилку я отримав і після оновлення з неофіційного репо, але вузол оновлення варіння виправив її.
користувач3685048


-1

у моєму випадку я перевстановлюю всі пакунки, встановлені за допомогою Homebrew

$ brew list | xargs brew reinstall

Після цього я починаю встановлювати свою версію, яка мені потрібна

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.