3

Python プログラムから呼び出される C++ 共有ライブラリがあります。C++ lib は、OS X で自作を使用してインストールした HDF5 でコンパイルされているため、/usr/local/lib. 問題は、古いバージョンの libhdf5 を含む PyTables もインストールされていることです。/Library/Frameworks/EPD64.framework/Versions/Current/...

ライブラリを問題なくコンパイルおよびリンクでき、otool -L実際に/usr/local/lib/libhdf5.dylib. しかし、Python から実行しようとすると、バージョンの不一致エラーが発生します。どういうわけか、実行時リンカーが代わりに古い hdf5 ライブラリをロードしています。

1 つの回避策は、代わりに hdf5 を静的ライブラリとしてビルドすることですが、より適切な解決策を見つけたいと思います。ランタイム リンカーが新しいライブラリを使用するように説得するにはどうすればよいですか? 私はすでに DYLD_LIBRARY_PATH を設定しようとしましたが、それは他のすべてを壊しました (Python と MacVim は起動しません)。

4

1 に答える 1

0

もっと情報を提供できますか?いくつかの選択肢(および質問)があります。

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

次のいずれかを実行できます。

  1. pyTables と同じバージョンを使用するようにライブラリをコンパイルし (コンパイル中に DYLD_LIB...)、pyTables ライブラリでプログラムを実行します: DYLD_LIBRARY_PATH=/correct/path/lib python myprog.py

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

呼び出している python (カスタム python またはアップル python) も確認する必要があります。

リンク中に特定の dyld を定義する可能性もあります (リンクに gcc または ld を使用しますか? ここでいくつかのオプションを見逃す可能性があります)。

gcc /path/lib1.dyld myLib.c -o myLib.o

このようにして、ライブラリはライブラリの特定のバージョンにリンクされます (注意! 正確な詳細は覚えていませんが、掘り出すことができます)。

これが役立つことを願っています。

br、

ジュハ

于 2011-03-21T22:03:01.337 に答える