[解決済み] Mac OS X で DYLD_LIBRARY_PATH を使ってもいいのでしょうか?また、それを使った動的ライブラリ検索アルゴリズムはどうなっていますか?
質問
動的ライブラリのパスは -install_name、@rpath、@loader_path で固定する必要があるため、DYLD_LIBRARY_PATH を使用しないようにという記事をいくつか読みましたが、どのようにすればよいですか?
LinuxとMac OS Xの両方で動作するプログラムを作るという意味では、Mac OS XのDYLD_LIBRARY_PATHは、LinuxのLD_LIBRARY_PATHと全く同じ働きをします。また、-install_nameと@rpathを付けないmakeファイルを(ほぼ)共有することができます。
- Mac OS XでDYLD_LIBRARY_PATHを使うのはOKですか?
- Mac OS Xでダイナミックライブラリが見つからない場合の検索アルゴリズムは? current directory -> DYLD_LIBRARY_PATH directories ... ?
解決方法は?
ご指摘の通りです。
DYLD_LIBRARY_PATH
のような動作をします。
LD_LIBRARY_PATH
を他の *nix で使用することができます。しかし、もう一つの環境変数である
DYLD_FALLBACK_LIBRARY_PATH
.
一般に、これらは(OSXとLinuxの両方で)開発用途にのみ推奨されます。なぜなら、同じシンボルテーブルを持っていないライブラリで上書きすると、シンボル検索エラーが発生することがあるからです。この良い例は、VecLib(例:blas lapack)のデフォルトインストールをカスタムインストールで上書きしようとした場合です。この場合、システム VecLib にリンクされたアプリケーションで、以下のようなシンボルが見つからないというエラーが発生します。
DYLD_LIBRARY_PATH
が設定されている場合は、その逆(カスタムアプリケーションでのシンボル検索エラー)となります。これは、システムのblas/lapackがATLASライブラリの完全な実装でないことが原因です。
DYLD_FALLBACK_LIBRARY_PATH
を使用すると、これらの問題は発生しません。
ライブラリを標準的でない場所にインストールする場合。
DYLD_FALLBACK_LIBRARY_PATH
の方がずっとまともです。これは、デフォルトのパスで提供されるライブラリからシンボルを探し、そこでシンボルが見つからなかった場合、指定されたパスにフォールバックします。
この処理の利点は、デフォルトのライブラリに対してコンパイルされたアプリケーションでシンボルのルックアップ・エラーが発生しないことです。
一般に、ライブラリを非標準的な場所にインストールする場合は、絶対パスを指定する必要があり、動的検索による曖昧さを排除します。
関連
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] フレームワークとライブラリの違いは何ですか?
-
[解決済み] 引数とパラメータの違いは何ですか?
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] 式と文の比較
-
[解決済み] 点から線分までの最短距離
-
[解決済み】共有オブジェクト(.so)、静的ライブラリ(.a)、DLL(.so)の違い?)
-
[解決済み】Debug.Assert()はいつ使うべきですか?)
-
[解決済み] さまざまなアプローチやコンセプトを理解するために学ぶべき重要な言語とは?[クローズド]
-
[解決済み] 2つの角度の差を求めるにはどうすればよいのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】dyld: ライブラリがロードされない ... 理由: 画像が見つからない
-
[解決済み] O(N log N)の複雑さ - 線形に似ている?
-
[解決済み] Mac OS X で DYLD_LIBRARY_PATH を使ってもいいのでしょうか?また、それを使った動的ライブラリ検索アルゴリズムはどうなっていますか?
-
[解決済み] 式と文の比較
-
[解決済み] ランタイムとコンパイルタイム
-
[解決済み】GOTOはまだ有害と考えられている?[クローズド]
-
[解決済み】Debug.Assert()はいつ使うべきですか?)
-
[解決済み] TypeとClassの違いは何ですか?
-
[解決済み] プログラミングにおける "Context "という言葉?[クローズド]
-
[解決済み] お気に入りの(賢い)防御的プログラミングのベストプラクティス【非公開