6

repeater.so次の方法で Linux の Python からロードできるC++ ライブラリがあります。

import numpy as np                                    
repeater = np.ctypeslib.load_library('librepeater.so', '.')

ただし、Mac OS X (Snow Leopard、32 ビット) で同じライブラリをコンパイルして getrepeater.dylibし、Python で次を実行すると:

import numpy as np                                
repeater = np.ctypeslib.load_library('librepeater.dylib', '.')

次のエラーが表示されます。

OSError: dlopen(/mydir/librepeater.dylib, 6): no suitable image found.  Did find:
    /mydir/librepeater.dylib: mach-o, but wrong architecture

Mac OS X 上の Python で動的ライブラリをロードするには、別のことを行う必要がありますか?

4

2 に答える 2

11

これは、dylib で利用できるアーキテクチャーだけの問題ではありません。また、Python インタープリターが実行されているアーキテクチャの問題でもあります。OS X 10.6 で Apple 提供の Python 2.6.1 を使用している場合、デフォルトでは、可能であれば 64 ビット モードで実行されます。ライブラリが 32 ビットとしてコンパイルされたと言っているので、Python を強制的に 32 ビット モードで実行する必要があります。Apple 提供の Python の場合、これを行う 1 つの方法は、特別な環境変数を設定することです。

$ python -c "import sys; print sys.maxint"
9223372036854775807
$ export VERSIONER_PYTHON_PREFER_32_BIT=yes
$ python -c "import sys; print sys.maxint"
2147483647

詳細については、Apple を参照man 1 pythonしてください。

于 2010-08-14T00:55:43.607 に答える
4

いいえ。librepeater.dylibエラー メッセージが示すように、Python とファイルの間にアーキテクチャの不一致があります。fileのアーキテクチャを確認するために使用しlibrepeater.dylibます。あなたのpythonは、リストされていないものの1つを使用して構築されます。

于 2010-08-14T00:43:19.077 に答える