なぜこのエラーが発生するのでしょうか?
dyld: Library not loaded というメッセージを見たことがあるなら、それはmacOSのダイナミックリンカーに関連する問題に直面しています。このエラーは、アプリケーションが想定されたパスに存在しない共有ライブラリ(.dylibファイル)を開こうとしたときに発生します。これはHomebrewを使用している開発者によくある悩みです。通常、brew upgrade や macOSのメジャーアップデートの直後に発生します。
通常、ターミナルでは以下のようなエラーが表示されます:
dyld: Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
Referenced from: /usr/local/bin/wget
Reason: image not found
この例では、wget が OpenSSL 1.0.0 を探しています。しかし、Homebrewがシステムを OpenSSL 3.0 にアップデートし、スペースを節約するために古い 1.0.0 のファイルを削除してしまった可能性があります。その結果、古いツールが動作しなくなってしまいます。
ステップ1:破損した依存関係を特定する
まず、どのライブラリが欠落しているのかを正確に確認する必要があります。推測で動かないでください。otool コマンドを使用して、失敗しているバイナリの内部を確認し、その要件を調べることができます。
otool -L /usr/local/bin/wget
このコマンドは、アプリが依存しているすべての共有ライブラリを表示します。リストの中から /usr/local/opt/openssl/ や /opt/homebrew/opt/ を含むパスを探してください。そこに記載されているファイルがハードドライブ上に存在しない場合、それがクラッシュの原因です。
ステップ2:最適な修正方法 — ソフトウェアを再インストールする
最もクリーンな解決策は、アプリケーションに新しいライブラリを認識させることです。Homebrewを通じてソフトウェアを再インストールすると、再リンクが実行され、通常は OpenSSL やその他の依存関係の正しいバージョンをアプリが参照するようになります。
Homebrewを更新する
brew update
brew upgrade
アプリを再インストールする
wget や postgres が問題の原因である場合は、再インストールコマンドを実行します:
brew reinstall wget
アプリによっては、Homebrewがデフォルトではインストールしなくなった古いバージョンの OpenSSL を特に必要とする場合があります。エラーが解消されない場合は、1.1 互換バージョンのインストールを試すことができます:
brew install openssl@1.1
ステップ3:最終手段としてシンボリックリンクを使用する
簡単に再インストールできない独自のツールや古い Python 3.7 環境などを使用している場合があります。このような切羽詰まった状況では、シンボリックリンクを作成してシステムをだますことができます。これにより、アプリが求めている古いパスを、実際に所有している新しいライブラリファイルに向けることができます。
注意: これは一時的な応急処置です。新しいライブラリのバージョンが大幅に変更されている場合、後でアプリが Symbol not found エラーでクラッシュする可能性があります。
# バージョン 1.1 を古い 1.0.0 のパスにマッピングする
ln -s /usr/local/opt/openssl/lib/libssl.1.1.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
ln -s /usr/local/opt/openssl/lib/libcrypto.1.1.dylib /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
Appleシリコン搭載のMac(M1、M2、M3)はベースパスとして /opt/homebrew を使用し、Intel Macは /usr/local を使用することに注意してください。これらのコマンドを実行する前に、パスを再確認してください。
ステップ4:グローバル環境パスを調整する
ライブラリファイルは存在するものの、システムがそれを認識できない場合は、シェルプロファイルを更新する必要があるかもしれません。macOSがライブラリを見つけられるように、.zshrc または .bash_profile にライブラリパスを追加します。
export DYLD_LIBRARY_PATH="/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH"
ファイルを保存した後、source ~/.zshrc を実行してターミナルをリフレッシュします。
正常に動作することを確認する方法
アプリケーションをもう一度実行してみてください。dyld メッセージが表示されずに起動すれば、解決です。念のため、最後にもう一度 otool を実行しましょう:
otool -L /usr/local/bin/wget
リストされたパスが、ファイルシステム内に実際に存在するファイルと一致していることを確認してください。
セキュリティとファイルの整合性
これらのエラーを修正するためにライブラリファイルを手動で移動したり、サードパーティのソースからダウンロードしたりすると、セキュリティホールを招くリスクがあります。破損した、あるいは改ざんされた .dylib ファイルは、開発環境全体を危険にさらす可能性があります。
プロの開発者は、ライブラリの整合性を検証するために ハッシュ生成ツール をよく使用します。ライブラリの SHA-256 チェックサムを公式ドキュメントと照らし合わせて確認することで、ファイルが安全で改ざんされていないことを保証できます。この30秒のチェックが、将来の大きなセキュリティトラブルを防ぐことにつながります。
重要なポイント
- Homebrewのアップデート:
brew upgradeを実行すると、特定のライブラリバージョンが削除され、それを必要とする古いツールが動作しなくなることがよくあります。 - プロセッサアーキテクチャ: 自分が Intel(
/usr/local)と Appleシリコン(/opt/homebrew)のどちらを使用しているかを常に確認してください。パスに互換性はありません。 - 再インストールを優先する: アプリの再インストールは、シンボリックリンクを作成するよりも常に安全です。シンボリックリンクは壊れやすく、ライブラリの内部構造が変更されている場合に予期しない動作を引き起こす可能性があります。

