2012-01-24 7 views
2

私はctypesでいくつかの本当に奇妙な問題に遭遇しています。私はCのインターフェイスを持つC + +ライブラリにインターフェイスするためにctypesを使用しています。ライブラリには多くの並列機能があります。たいていの場合、並列呼び出しはC++層からのセグメンテーションで終わる傾向がありますが、私はシリアルコードで実行しています。 PythonインタプリタとC++コードを同じバージョンのC++コンパイラでコンパイルする必要があるかどうかに制限があるのだろうか?もしそうなら、どのようにC++がPythonをビルドするために使われたのかを知るにはどうすればいいですか?私はPython上で文字列を実行しようとしましたが、gccとg ++のgrepは何も表示されません。ctypes - PythonはCライブラリと同じバージョンでコンパイルする必要がありますか?

+1

私はこれまでに似たような問題はありませんでした。 Pythonを構築するために使用されたコンパイラを見つける方法については、['sys.version'](http://docs.python.org/library/sys.html#sys.version)を見て、[' platform.python_compiler ) '](http://docs.python.org/library/platform.html#platform.python_compiler)、または単に' python'を実行してください。 –

答えて

4

ctypesで呼び出すネイティブライブラリは、一致するランタイムでビルドする必要はありません。実際、ネイティブライブラリでもCランタイムを使用するという要件さえありません。

たとえば、ctypesを使用すると、他の言語で書かれたコードを呼び出すことができます。デルファイまたは、ctypesを使用してMSVCにリンクされていないWindows API関数を呼び出すこともできます。

私はあなたの問題を解決するために別の場所を探す必要がありますね!

+0

OK、私はあなたにそれを信じなければならないと思います。ありがとう! – rokuingh

+0

非常に異なるランタイムにリンクするmingwというDLLをビルドするだけで、簡単にテストできます。 –

0

CPythonにはC++コードが含まれていないため、CPythonプロセスにロードされたC++ライブラリをコンパイルするためのC++コンパイラに関する要件はありません。しかし、C層とC++ライブラリは、通常、同じC++コンパイラでコンパイルする必要があります。また、C++ライブラリまたはCレイヤーがlibpythonとリンクしている場合は、後でそのライブラリをロードするctypesコードを実行するために使用される同じバージョンのCPythonに対してコンパイルする必要があります。

関連する問題