1

私はPythonをC++ベースのプログラミング言語(CCL:計算制御言語であり、誰もが聞いたことがあるわけではありません)に埋め込もうとしています。したがって、呼び出し元の「メイン」関数は実際にはありません。

mainを使用してテスト.ccプログラムを作成しました。コンパイルして実行すると、独自のpythonモジュールとシステムモジュールをインポートして使用できます。

コードをCCLベースのプログラムに埋め込んで(g ++で)コンパイルすると、ほとんどの機能があるように見えますが、ランタイムエラーが発生します:ImportError:/usr/lib/python2.6/lib-dynload/_ctypes。だから:未定義のシンボル:PyType_GenericNew

これは、ランタイムエラー時に実行されるコードです。

void FFSim::initCKBot (){   
    Py_Initialize(); 
    PyRun_SimpleString("execfile('logical.py')");
}

logic.pyはモジュールをインポートし、そのうちの1つは'from cytpes import *'を実行しようとします。これにより、ランタイムエラーがスローされます。

誰かが私にこれを説明し、それを解決する方法を教えてもらえますか?コードのc++アスペクトをコンパイルするときに、オブジェクトを正しくリンクしたようです。

ありがとう。

4

1 に答える 1

1

Python ランタイムは、事実上、プログラムが使用するライブラリのコレクションです。これらのライブラリは文字列を受け取り、それらを Python バイトコードに変換してから、バイトコードを解釈します。あなたが得ているエラーは、プログラムの解釈の一部として、Python ランタイムが関数 ( PyType_GenericNew) を呼び出す必要があるが、その関数がシステム上のコンパイル済み Python ランタイムに存在しないということです。関数の名前から外れて、これは無視したり回避したりできるものではありません。これは、ランタイムの基本的な部分です。

あなたが正しいと仮定するとPATH、最善の解決策は Python を再インストールまたは再構築することです。インストールに重要な何かが欠けています。

于 2010-06-02T08:53:47.343 に答える