dylibを正常に呼び出すアプリケーション(実行可能ファイル)を作成しましたが、dylibファイルと実行可能ファイルは別のディレクトリにあります。 $ PATH環境変数にdylibファイルを含むディレクトリを追加しましたが、まだ読み込まれません。すべてのdylibファイルを実行可能ファイルにコピーすると、プログラムが最終的に実行されます。これにより、dylibファイルに問題はないことが確認されます。しかし、どのように私はそれを見つけるためにOSを教えてもよろしいですか? ウィンドウでは、$ PATHにdllファイルを含むディレクトリパスを追加するだけです。 Mac OS Xで何をする必要がありますか? ありがとう!Mac OS Xでdylibを使用する方法(C++)
答えて
dylibがライブラリのINSTALL_NAMEで指定された場所にある場合、それはJust Work *になります。
それ以外の場合は、dylibの場所をDYLD_LIBRARY_PATHに追加できます。 dyld documentationを読むことをお勧めします。
*)は完全に正確である必要がありますが、DYLD_ROOT_PATH/INSTALL_NAMEにある必要がありますが、DYLD_ROOT_PATHを使用するのは非常にまれです。
申し訳ありませんが、「ライブラリのINSTALL_NAME」とは何ですか?私はDYLD_LIBRARY_PATHを追加しても動作しません。混乱します。 –
変数をエクスポートする必要があります:export DYLD_LIBRARY_PATH =/usr/local/lib' – Michel
DYLD_LIBRARY_PATH
環境変数を設定する必要があります。 dyld man pageから
:
This is a colon separated list of directories that contain libraries. The dynamic linker
searches these directories before it searches the default locations for libraries. It allows
you to test new versions of existing libraries.
For each library that a program uses, the dynamic linker looks for it in each directory in
DYLD_LIBRARY_PATH in turn. If it still can't find the library, it then searches DYLD_FALL-
BACK_FRAMEWORK_PATH and DYLD_FALLBACK_LIBRARY_PATH in turn.
ありがとう!私もgoogleでこれを見つけた、私はDYLD_LIBRARY_PATHを設定した、しかし、それは動作しません、問題はまだそこにある!私はとても混乱しています –
私はそれを試したところ、私のMacでうまく動作します。 – EmeryBerger
こんにちは、EmeryBerger、あなたは元々空のDYLD_LIBRARY_PATH変数ですか?私のです。これが最初に間違っているかどうかはわかりません。 –
ジャスティンが提供するリンクを読んだ後、私は成功した私の実行ファイルが配置されているのと同じディレクトリを指すように私のdylibのinstall_nameを変更する@executable_path
トークンを使用することができました。
@executable_path絶対パスは迷惑です。場合によっては、フレームワークを/ Libraryやそれに類する場所に をインストールしなくても、フレームワークをアプリケーションに埋め込むことができます。
これに対するMacのソリューションは@executable_pathです。これは、ライブラリのインストール名の冒頭に置かれたときに、 が最後のコンポーネントである をロードしている実行可能ファイルのパスに展開されるというマジックトークン です。たとえば、Bar.appが Foo.frameworkとリンクしているとします。 Bar.appが/ Applicationsにインストールされている場合、 @executable_pathは/Applications/Bar.app/Contents/MacOSに展開されます。 Contents/Frameworksにフレームワークを埋め込む予定の場合、 はFoo.frameworkのインストール名を @executable_path /../Frameworks/Foo.framework/Versionions/A/Fooに設定するだけです。 ダイナミックリンカーは、 /Applications/Bar.app/Contents/MacOS/../Frameworks/Foo.framework/Versions/A/Foo に展開され、フレームワークが見つかります。
http://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html
私は例を挙げて紹介します。
はのはとそのdylibsがのlib /ローカルは/ opt /にある変換/ Iは、次の実行可能は/ opt/local/binにあるとしましょう。 別のディレクトリにコピーして、実行可能ファイルをコピーした場所と同じディレクトリからdylibをロードします。
> mkdir ~/tmp/bin
> cp /opt/local/bin/convert ~/tmp/bin
取得の実行可能ファイルのリストが
> otool -L ~/tmp/bin/convert
~/tmp/bin/convert:
/opt/local/lib/libtiff.3.dylib (compatibility version 13.0.0, current version 13.5.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/opt/local/lib/libjpeg.8.dylib (compatibility version 12.0.0, current version 12.0.0)
/opt/local/lib/libfontconfig.1.dylib (compatibility version 6.0.0, current version 6.4.0)
/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
/opt/local/lib/libfreetype.6.dylib (compatibility version 15.0.0, current version 15.0.0)
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
/opt/local/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.6)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.6)
...
私だけは/ opt/local/libのディレクトリ内dylibs気に、私たちはでのみdylibsを引き出し/を選ぶdylibs 。私は他のすべてのdylib参照をそのまま/usr/lib/libSystemものに保ちたいと思います。
> DYLIBS=`otool -L ~/tmp/bin/convert | grep "/opt" | awk -F' ' '{ print $1 }'`
は、実行ファイルがにコピーされた同じディレクトリに実行ファイルが参照するすべてのdylibsをコピーします。
> for dylib in $DYLIBS; do cp $dylib ~/tmp/bin/; done;
我々は、上記の手順で引き出さすべてdylibsのインストール名前を変更し、dylib名に@executable_path
を付加することで、それらを交換するinstall_name_tool
を使用してください。これにより、ダイナミックリンカは、実行可能ファイルのあるディレクトリと同じディレクトリにあるdylibを探します。名前をインストール
> for dylib in $DYLIBS; do install_name_tool -change $dylib @executable_path/`basename $dylib` ~/tmp/bin/convert; done;
確認が変更されているとはlibSystemはまだは/ usr/libに/はlibSystemを指していること。
> otool -L ~/tmp/bin/convert
~/tmp/bin/convert:
@executable_path/libtiff.3.dylib (compatibility version 13.0.0, current version 13.5.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
@executable_path/libjpeg.8.dylib (compatibility version 12.0.0, current version 12.0.0)
@executable_path/libfontconfig.1.dylib (compatibility version 6.0.0, current version 6.4.0)
@executable_path/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
@executable_path/libfreetype.6.dylib (compatibility version 15.0.0, current version 15.0.0)
@executable_path/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
@executable_path/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.6)
@executable_path/libz.1.dylib (compatibility version 1.0.0, current version 1.2.6)
...
絶対パスへのリンクを含んでいる可能性があるので、各ライブラリファイルについても同様に行う必要があることに注意してください – Claudiu
- 1. Mac OS X libcurl dylib互換バージョン
- 2. のMac OS X NodeJS:Macのポートを使用して、MAC OS X上
- 3. CocoaまたはC++を使用してMac OS Xでスクリーンショットを撮る方法
- 4. Mac OS XでOpenGlを使用するCプログラムをコンパイル
- 5. Mac OS XでSWIGを使用してC++をコンパイルする
- 6. C++プロジェクトでLibVLCを使用する[Mac OS X - Xcode]
- 7. Mac OS X 10.6用cscopeのインストール方法
- 8. iCloudを使用してMac OS XからMac OS XをiPad/iPhoneに同期する方法
- 9. Mac OS X 10.6.6アップデートをMac OS X 10.6.3に追加する方法dmg
- 10. Mac OS XでC++コマンドを遅らせる方法
- 11. TR1を使用してMac OSでC++をコンパイルする方法
- 12. Mac OS Xでvirtualenvを使用
- 13. SymfonyをMac OS Xで使用
- 14. MAC OS XでPEARを使用
- 15. Mac OS X用UIPopoverController?
- 16. Mac OS XのC#/ Monoユニットテスト
- 17. OS/Xでfflushをcで使用する方法
- 18. emacs 24(Mac OS X Lion)でM-xを "` `にマップする方法
- 19. C#とMac OS XでZMQを使うX
- 20. MAC OS XでCLIONを使用してEOFを通知する方法
- 21. Mac OS X上のFlash CS5でADOBE AIR SDK 3.1を使用する方法
- 22. Mac OS XでJNotify?
- 23. mac os xのプロセスで使用されるメモリx
- 24. Webkit for Mac OS Xの入手方法
- 25. ffmpeg-phpのインストール方法Mac OS X leopard
- 26. Mac OS Xバージョン固有のAPI使用
- 27. Mac OS X用openalチュートリアル
- 28. Mac OS X用Pascal IDE
- 29. Mac OS X用のFortranデバッガ
- 30. Mac OS X用のldconfig
'otool -L app'を使用してアプリケーションの依存関係を確認してください。それらが絶対パスとしてハードコードされている場合は、 'install_name_tool -change old new file'を使って相対パスに変更します。その後、リンカは 'DYLD_LIBRARY_PATH'環境変数でライブラリを見つけることができます。 – aponomarenko