非常に簡単なことなんですが、macosでとあるライブラリがあるのに、そのライブラリに依存している別のライブラリが、そのライブラリを見つけられないという状況になりました。結果からいうと非常に簡単なコマンドで解決できましたが、依存元と依存先について言及している資料があまりなかったので、備忘録として挙げておくことにしました。
まず状況としては以下のような状況です。
まず状況としては以下のような状況です。
dyld: Library not loaded: libopenlibm.4.dylib Referenced from: /usr/lib/system/libcompiler_rt.dylib Reason: image not foundいうまでもなく、libopenlibm.4.dyliは/usr/lib/system/にあります。そこで、参照元である、/usr/lib/system/libcompiler_rt.dylibの参照情報を以下のようにして確認します。
otool -L usr/lib/system/libcompiler_rt.dylib /usr/lib/system/libcompiler_rt.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/system/libunwind.dylib (compatibility version 1.0.0, current version 35.3.0) libopenlibm.4.dylib (compatibility version 1.0.0, current version 4.0.0) #以下省略libopenlibm.4.dylibへの参照だけパスが含まれていませんので、参照元のlibcompiler_rt.dyldのこの部分を以下のように変更します。
# ls usr/lib/system/libcompiler_rt.dylib usr/lib/system/libcompiler_rt.dylib install_name_tool -change libopenlibm.4.dylib /usr/lib/system/libopenlibm.4.dylib usr/lib/system/libcompiler_rt.dylibつまり、参照元(依存元)である libcompiler_rt.dylibのパス指定のない"libopenlibm.4.dylib"への参照をパス指定を含む/usr/lib/system/libopenlibm.4.dylibに変更するということです。このコマンドの結果、otool -Lは以下のように修正されます。
otool -L usr/lib/system/libcompiler_rt.dylib usr/lib/system/libcompiler_rt.dylib: /usr/lib/system/libcompiler_rt.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/system/libunwind.dylib (compatibility version 1.0.0, current version 35.3.0) /usr/lib/system/libopenlibm.4.dylib (compatibility version 1.0.0, current version 4.0.0) #以下省略これで問題は解決しましたが、今回の場合、本来はlibcompiler_rtのビルド時点で相対パスではなく絶対パスを指定するようにするのが正解だとおもいます。今回は以上です。それでは。
コメント
コメントを投稿