pnpmの「Library not loaded」エラーを解決する
問題の発生
Astro.jsの新規プロジェクトを作成しようとした際に、以下のようなエラーが発生しました:
dyld[26833]: Library not loaded: /opt/homebrew/opt/icu4c/lib/libicui18n.72.dylib
Referenced from: <3CF6C928-EC2B-3162-8AAF-81F101FD076B> /opt/homebrew/Cellar/node/19.8.1/bin/node
このエラーは、macOSでpnpm create astro@latest
コマンドを実行した際に表示されました。
原因
エラーメッセージを分析すると、以下のことがわかります:
- Node.js(バージョン19.8.1)が、
libicui18n.72.dylib
という共有ライブラリを必要としています - このライブラリは
icu4c
パッケージの一部で、International Components for Unicode(国際化のためのコンポーネント)を提供します - 必要なバージョン(72)が見つからないため、エラーが発生しています
Node.jsは特定のバージョンのICUライブラリに依存していますが、Homebrewでインストールされているicu4cパッケージは別のバージョン(より新しいバージョン)になっているため、互換性の問題が発生しているのです。
解決方法
この問題を解決するには、以下の手順を実行します:
1. 現在インストールされているicu4cのバージョンを確認する
まず、実際にどのバージョンのライブラリが存在するかを確認します:
ls /opt/homebrew/opt/icu4c/lib/
このコマンドを実行すると、libicui18n.XX.dylib
のような形式のファイルが表示されます(XXは実際のバージョン番号)。
2. シンボリックリンクを作成する
Node.jsが探しているバージョン(72)のライブラリが存在しないため、実際に存在するバージョンからシンボリックリンクを作成します:
sudo ln -s /opt/homebrew/opt/icu4c/lib/libicui18n.XX.dylib /opt/homebrew/opt/icu4c/lib/libicui18n.72.dylib
※ XXには実際に存在するバージョン番号(例:73や74など)を入力してください。
3. Astroプロジェクトを再度作成する
シンボリックリンクを作成した後、再度Astroプロジェクトの作成を試みます:
pnpm create astro@latest
これで、エラーなくAstroプロジェクトが作成できるはずです。
代替解決策
シンボリックリンクの作成が上手くいかない場合は、以下の代替方法も試してみてください:
-
icu4cを再インストールする:
brew reinstall icu4c
-
Node.jsを再インストールする:
brew reinstall node
-
Homebrewを更新する:
brew update && brew upgrade
まとめ
このエラーは、Homebrewでインストールされたパッケージのバージョンが、Node.jsが期待するバージョンと一致しないことが原因です。シンボリックリンクを作成することで、Node.jsが必要なバージョンのライブラリを見つけられるようになり、問題が解決します。
macOSでHomebrewを使用している場合、特にNode.jsベースのツールを使う際には、このような依存関係の問題が発生することがあります。シンボリックリンクの作成は、ライブラリのバージョン不一致を解決するための一般的な方法です。
Discussion