ロナえるの夫です。
仕事でも趣味でもプログラミングをやっています。
C++のコンパイルをしていて数年に1度ぶつかるエラー
dyid: Library not loaded: @rpath/xxxx
こちらの対処法に関して備忘録として残しておきます。
まずは結論から
export LD_LIBRARY_PATH=ライブラリのパス
上記のようにコンソール画面で入力してから再度実行ファイルを実行すれば動きます。
「ライブラリのパス」と言っているのは「dyid: Library not loaded: @rpath/xxxx」の「xxxx」があるファイル位置です。例えば、「/usr/hoge/xxxx」の位置にあったとしたら、
export LD_LIBRARY_PATH=/usr/hoge
と入力します。
そもそも「dyid: Library not loaded」はどういう状態?
このエラーにぶつかった方はMacOSでライブラリを動的リンクするようにビルドした方でしょう。「Library not loaded」はその表示通りでライブラリをロード(動的リンク)できない、つまりライブラリが見つかっていないことを指しています。
そこで、下記コードを入力することで、ライブラリの位置を教えてあげることができます。
export LD_LIBRARY_PATH=ライブラリのパス
動的リンクって?
その名の通り実行時にライブラリをリンクすることを指します。これと対極にあるのが静的リンクです。静的リンクではビルドの時点でライブラリがリンクされます。静的リンクはビルド時にリンクされるので、生成ファイルはライブラリを含みます。一方、動的リンクではビルド時点では生成ファイルにライブラリを含みません。それぞれのメリットとしては、
静的リンク
- 実行するときに1つのファイルで完結する
- 既にリンクしているので実行が早い
動的リンク
- ライブラリの置き換えが簡単
- 同じライブラリを複数実行ファイルで利用する場合、複数の実行ファイルから同じライブラリを呼ぶことができるのでメモリの節約ができる
おわりに
他の対処方法を知っている方がいたらぜひ教えてください!