2011-02-26 4 views
3

私のPythonプログラムから呼び出されるC++共有ライブラリがあります。 C++のlibはOS Xでhomebrewを使ってインストールしたHDF5でコンパイルされているので、/usr/local/libにあります。さて問題は、私はまた、私は私のライブラリがうまくコンパイルとリンクさせることができ/Library/Frameworks/EPD64.framework/Versions/Current/...OS X実行時リンカーがlibの間違ったバージョンを見つける

のどこかに設置さlibhdf5の古いバージョンが含まれてインストールPyTablesを、持っている、とotool -Lことを実際に/usr/local/lib/libhdf5.dylibを指しています。しかし、Pythonから実行しようとすると、バージョンの不一致エラーが発生します。何とか実行時リンカーが古いhdf5ライブラリをロードしています。

代わりに静的ライブラリとしてhdf5をビルドするのが良い方法ですが、新しいライブラリを使用するように実行時リンカーにどのように説得することができますか?私はすでにDYLD_LIBRARY_PATHを設定しようとしましたが、それは他のすべてを破っただけです(PythonとMacVimは起動しません)。

+0

私はMEX-ファイルは、MATLABで同じ問題を抱えています。私はリサイクルできるソリューションを見つけてくれることを願っています! – Simon

答えて

0

詳細情報を提供できますか?私にはいくつかの選択肢(および質問)があります。

私が正しく理解していれば、lib_ver_a.dyldを使用するライブラリと、lib_ver_b.dyldを使用するpyTablesがあります。私。同じライブラリだが異なるバージョン。

あなたは可能性があり、次のいずれか

  1. は(コンパイルながら... DYLD_LIB)pyTablesと同じバージョンを使用するようにライブラリをコンパイルしpyTablesライブラリを使用してプログラムを実行します。DYLD_LIBRARY_PATH = /正しい/パス/ libにpython myprog.py

  2. あなたのxcodeをアップグレードしてください(あなたのバージョンはどのosxバージョンですか?)。これはあなたのライブラリやpyTablesをアップグレード(気をつけて、最新のが最も安定して必要ありません)

また、あなたは(カスタム1またはリンゴ1)と呼んでいるのPythonいる確認する必要があります。

gccの/path/lib1.dyld myLib.c -o:リンク中の特定のdyldのを定義する可能性もあり

(?あなたは私がここにいくつかのオプションを逃すかもしれないリンクするためのgccやLDを使用しています) myLib.o

この方法では、ライブラリはライブラリの特定のバージョンにリンクされています(注意してください!正確な詳細はわかりませんが、私はそれらを掘り出すことができます)。

こちらがお役に立てば幸いです。

BR、

ユハ

+0

今働いているようです。何が変わったのかは分かりません。 XCodeをアップグレードする必要はありませんでした.DYLD_LIBRARY_PATHを設定すると、それ自体の問題が発生しますので、私はちょうどこれを魔法の妖精の塵に分けます。とにかくありがとう。 – krashalot

関連する問題