1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】dyld: ライブラリがロードされない ... 理由: 画像が見つからない

2022-01-11 15:03:45

質問

Mac OS Xで実行ファイルを実行しようとすると、エラーが発生します。

dyld: Library not loaded: libboost_atomic.dylib
  Referenced from: /Users/"Directory my executable is in"
  Reason: image not found
Trace/BPT trap:5

boost ライブラリをインストールし、それが /opt/local/lib . を貼り付けると、実行ファイルがそのディレクトリの中だけを見てしまうことが問題なのだと思います。 libboost_atomic.dylib を入れると、もう気にならなくなります。残念ながら、次のブーストライブラリが見つからないと文句を言われます。

解決方法は?

すべてのブーストライブラリを検索する(ここで exefile は実行ファイルの名前)。

$ otool -L exefile
exefile:
        @executable_path/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

で、それぞれの libboost_xxx.dylib を、行う。

$ install_name_tool -change @executable_path/libboost_something.dylib /opt/local/lib/libboost_something.dylib exefile

を使って検証し、最後に otool をもう一度。

$ otool -L exefile
exefile:
        /opt/local/lib/libboost_something.dylib (compatibility version 0.7.0, current version 0.7.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 65.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

マンページです。 otool install_name_tool

EDIT 少し前に、Pythonスクリプト( copy_dylibs.py ) は、アプリをビルドするときに、これらのことをすべて自動的に処理します。のすべてのライブラリをパッケージングします。 /usr/local または /opt/local をアプリのバンドルに追加し、それらのライブラリへの参照を修正して @rpath . つまり、Homebrew を使ってサードパーティのライブラリを簡単にインストールし、同じように簡単にパッケージを作成することができます。

このスクリプトは github .