Mac OS XではDYLD_LIBRARY_PATHをどこで設定すればよいですか?


28

XCodeで記述したコードで使用するために、Mac(OS X)にC ++で記述されたソルバーをインストールしようとしています。

ソルバーのドキュメントには次のように書かれています:

必ず「。」を付けてください あなたのDYLD_LIBRARY_PATH中に

  • 既製の実行可能ファイルを実行する
  • libamg.dylib(およびgfortran RTSlibs)とのリンク

私はこれが何を意味するのか本当に理解していません。何を変更するにはどこで何が必要ですか?

私はいくつかのグーグルをしましたが、私のような初心者にとって十分に単純なものに出くわしていません!私をオンラインリソースに誘導したり、環境変数を設定する方法と場所の詳細を教えてくれたりする気のない患者がいる場合は、非常に感謝します。

回答:


20

これは環境変数であり、通常はターミナルで設定されます

export DYLD_LIBRARY_PATH=someValue

man dyld 言う:

DYLD_LIBRARY_PATH

これは、ライブラリを含むディレクトリのコロン区切りのリストです。動的リンカーは、ライブラリのデフォルトの場所を検索する前にこれらのディレクトリを検索します。既存のライブラリの新しいバージョンをテストできます。

プログラムが使用する各ライブラリについて、動的リンカは各ディレクトリDYLD_LIBRARY_PATHで順番に検索します。それでもライブラリが見つからない場合は、検索DYLD_FALLBACK_FRAMEWORK_PATHDYLD_FALLBACK_LIBRARY_PATHて順番に検索 します。

-Lオプションを使用してくださいotool(1)。実行可能ファイルがリンクされているフレームワークと共有ライブラリを発見します。


あなたはおそらく次のようなものが欲しいでしょう

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

.検索された場所のリストの先頭(現在のディレクトリ)に追加します。変更されていないOS Xでは、DYLD_LIBRARY_PATH現在の値はありません:

$ echo $DYLD_LIBRARY_PATH

$

プログラムを実行する意図に応じて、Xcodeなどでこれを異なる方法で設定する必要があります(どこで実行するかはわかりません)。


1
ロードされたライブラリがシステム提供のライブラリを見つけるのを妨げる可能性があるため、通常設定DYLD_LIBRARY_PATHもするべきでもないという@TVNshackに同意しますDYLD_FRAMEWORK_PATH。動作を改善するには、代わりにFALLBACKバージョンを使用してください。この回答の詳細:stackoverflow.com/a/3172515/43615
SuperTempel

21

export DYLD_LIBRARY_PATHシステムに設定しないでください。

共有ライブラリのパスは、とを使用otool -Lして修正できますinstall_name_tool

たとえば、Perl DBD-MySQLをコンパイルすると、リンカーはMySQLをインストールした場所を認識しないため、Perl DBD-MySQLを使用できません。

># make
....


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)


#> install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib blib/arch/auto/DBD/mysql/mysql.bundle


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)



#> make test
...
Result: PASS

#> make install

これは簡単です。


クイックFYI:install_name_toolは、新しいパスが置換するパスよりも長い場合、サイレントで失敗します。パスが期待どおりに変更されたことを常に「otool -L」で確認します。
user15685

別のダイナミックライブラリに依存するプラグイン(基本的にはダイナミックライブラリ自体)をコンパイルするとします。他のユーザーにプラグインとその依存関係を提供するにはどうすればよいですか?
Royi

代わりにを設定するとDYLD_FALLBACK_FRAMEWORK_PATH、この場合機能します。特に、ビルドしたdylibをアプリで提供する必要があり、最終的にパスを予測できない場合は、libの内部パスを変更するよりもはるかに簡単です。
スーパーテンペル

7

Xcode 4では、プロジェクトSchemeに追加して、次のようなエラーを回避できます。

dyld: Library not loaded: @loader_path/libLeap.dylib
  Referenced from: /Users/paulsolt/Library/Developer/Xcode/DerivedData/LeapTest-eqcxmzewheyjusgrcszyvlcxlgna/Build/Products/Debug/LeapTest
  Reason: image not found
  1. メニューで[製品]-> [スキームの編集]-> [引数]タブ-> [環境変数]の追加->キー:DYLD_LIBRARY_PATH値:/ Users / MyUserAccount / path / to / lib

  2. ユーザーアカウントへのパスとライブラリフォルダーへのフルパスを変更します。

  3. ビルドして実行できるはずです。

Xcode 4でのDYLD_LIBRARY_PATHの設定

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.