1. ホーム
  2. macos

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

2022-01-27 16:15:25

質問

送られてきた実行ファイルを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 . この問題は、実行ファイルが今いるディレクトリしか見ていないことと関係していると思います。残念ながら、次のブーストライブラリが見つからないと文句を言われます。

これを解決する簡単な方法はありますか?

どのように解決するのですか?

すべてのブーストライブラリを検索する(ここで 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 .