How to fix missing library after update and upgrade of Homebrew
Asked Answered
C

1

10

I decided to update and upgrade Homebrew on a Friday afternoon (because why not) and it appears to have resulted in a missing library that's affecting my ability to run pretty much everything (PHP, Laravel Valet, Node, etc...) The error message on each is the same, so I'm hoping this is a simple fix, but I'm not sure where to begin.

Chriss-MacBook-Pro-2:~ chris$ node --version
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
  Referenced from: /usr/local/bin/node
  Reason: image not found
Abort trap: 6
Chriss-MacBook-Pro-2:~ chris$ valet
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
Password:
Sorry, try again.
Password:
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
/usr/local/bin/valet: line 54:   729 Abort trap: 6           php "$DIR/cli/valet.php" "$@"
Chriss-MacBook-Pro-2:~ chris$ php --version
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.61.dylib
  Referenced from: /usr/local/bin/php
  Reason: image not found
Abort trap: 6

They all appear to be looking for the library in /usr/local/opt/icu4c/lib/libicui18n.61.dylib

** EDIT **

I ran the brew command suggested by Styx and here is the output:

Chriss-MacBook-Pro-2:~ chris$  brew link icu4c
Warning: Refusing to link macOS-provided software: icu4c
If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.bash_profile

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

Adding icu4c to my path is easy enough, but I'm not sure what to do about the second part asking to me to set

** Update **

Here is the output from running ls -l /usr/local/opt/icu4c/lib/

total 131128
drwxr-xr-x  6 chris  staff       192 Apr 17 15:42 icu
-rw-r--r--  1 chris  staff  27537504 May 31 14:04 libicudata.64.2.dylib
lrwxr-xr-x  1 chris  staff        21 Apr 17 15:42 libicudata.64.dylib -> libicudata.64.2.dylib
-r--r--r--  1 chris  staff  27532496 Apr 17 15:42 libicudata.a
lrwxr-xr-x  1 chris  staff        21 Apr 17 15:42 libicudata.dylib -> libicudata.64.2.dylib
-r--r--r--  1 chris  staff   2578452 May 31 14:04 libicui18n.64.2.dylib
lrwxr-xr-x  1 chris  staff        21 Apr 17 15:42 libicui18n.64.dylib -> libicui18n.64.2.dylib
-r--r--r--  1 chris  staff   4700120 Apr 17 15:42 libicui18n.a
lrwxr-xr-x  1 chris  staff        21 Apr 17 15:42 libicui18n.dylib -> libicui18n.64.2.dylib
-r--r--r--  1 chris  staff     61280 May 31 14:04 libicuio.64.2.dylib
lrwxr-xr-x  1 chris  staff        19 Apr 17 15:42 libicuio.64.dylib -> libicuio.64.2.dylib
-r--r--r--  1 chris  staff     68744 Apr 17 15:42 libicuio.a
lrwxr-xr-x  1 chris  staff        19 Apr 17 15:42 libicuio.dylib -> libicuio.64.2.dylib
-rw-r--r--  1 chris  staff     67124 May 31 14:04 libicutest.64.2.dylib
lrwxr-xr-x  1 chris  staff        21 Apr 17 15:42 libicutest.64.dylib -> libicutest.64.2.dylib
-r--r--r--  1 chris  staff     79432 Apr 17 15:42 libicutest.a
lrwxr-xr-x  1 chris  staff        21 Apr 17 15:42 libicutest.dylib -> libicutest.64.2.dylib
-r--r--r--  1 chris  staff    174512 May 31 14:04 libicutu.64.2.dylib
lrwxr-xr-x  1 chris  staff        19 Apr 17 15:42 libicutu.64.dylib -> libicutu.64.2.dylib
-r--r--r--  1 chris  staff    235368 Apr 17 15:42 libicutu.a
lrwxr-xr-x  1 chris  staff        19 Apr 17 15:42 libicutu.dylib -> libicutu.64.2.dylib
-rw-r--r--  1 chris  staff   1578232 May 31 14:04 libicuuc.64.2.dylib
lrwxr-xr-x  1 chris  staff        19 Apr 17 15:42 libicuuc.64.dylib -> libicuuc.64.2.dylib
-r--r--r--  1 chris  staff   2498616 Apr 17 15:42 libicuuc.a
lrwxr-xr-x  1 chris  staff        19 Apr 17 15:42 libicuuc.dylib -> libicuuc.64.2.dylib
drwxr-xr-x  5 chris  staff       160 May 31 14:04 pkgconfig
Coppice answered 31/5, 2019 at 18:25 Comment(5)
Try brew link icu4c, perhaps some symlinks were not created during update.Prue
Thanks @Prue , I updated the question with the output of that commandCoppice
Sorry, I forgot that icu4c is keg-only so it isn't linked into /usr/local. Show output of ls -l /usr/local/opt/icu4c/lib/, please.Prue
@Prue - I updated the question with the output of ls -l /usr/local/opt/icu4c/lib/Coppice
I have a similar problem (with graph-tool not node but I'm guessing it's the same issue). However, my ls -l /usr/local/opt/icu4c/lib/ only shows version 51.1 files. However, brew info icu4c says that the only installed version is 64.2. Any guesses? Should I start a new question instead of asking it here?Hallucinosis
P
24

It seems your icu4c has been upgraded, but your php/node are still refer to an older version.

You can:

  1. Reinstall software which depends on icu4c:

    brew uses --installed icu4c | xargs brew reinstall
    
  2. Switch to using older version of icu4c:

    brew switch icu4c 61.2
    
Prue answered 2/6, 2019 at 19:47 Comment(5)
I went with option #1 and that did the trick. Thank you @PrueCoppice
Note that brew switch is probably necessary, even if you have only one version left. Reinstalling alone didn't work for me, but switch did the magic. Thanks!Chapfallen
@GiacomoLacava Interesting. Did you switch to an older version of icu4c or to the newer one?Prue
I think it's the new one (64.2). I know I had a 63 previously hanging around.Chapfallen
Thank you man. The first one works like a charm!Claman

© 2022 - 2024 — McMap. All rights reserved.