2

次の組み合わせを使用しようとしたのは私だけですか: boost_1_45_0, MSVC 10, Python31 ?

ブーストからの基本的なサンプル (boost_1_45_0\libs\python\example\quickstart\embedding.cpp) がコンパイルされていないことを発見しました (修正方法は以下を参照)。コンパイル時の問題:

if (PyImport_AppendInittab("embedded_hello", initembedded_hello) == -1)
  throw std::runtime_error("Failed to add embedded_hello to the interpreter's "
             "builtin modules");

正しい名前はinitembedded_hello ではなくinit_module_embedded_helloであることを発見しました。私の最初の質問は、この名前の変更について正しいですか?

2 番目の問題はSystemError: NULL result without error in PyObject_Call、宣言したモジュールをインポートするときです。

from embedded_hello import *

インポートをコメントアウトすると、内部の python のモジュール (io など) が正常に動作することがわかります。では、2 番目の質問は、インポートの問題は何ですか?

どんな助けでも大歓迎です!

4

1 に答える 1

5

Python 3では、initembedded_helloの代わりにPyInit_embedded_helloを使用します。msvc9で動作します。

どうやらquickstart\embedding.cppはPython3用に更新されていないようです。類似していて最新のpyhon/test/exec.cppを見てください。

Msvc10はPythonとは異なるCランタイムライブラリを使用するため、ランタイムがクラッシュする可能性があります。Python 2.6、2.7、3.1、および3.2拡張機能を構築するために推奨されるコンパイラは、msvc9、またはvc90crtに対してリンクするコンパイラです。

于 2011-01-11T21:03:59.427 に答える