0

したがって、C++ プログラム内で python を使用しようとするのはこれが初めてであり、ライブラリをリンクする際にいくつかの問題が発生しています。

だから私はGNU GCCコンパイラでコードブロックIDEを使用し、次のメインプログラムを持っています:

#include <Python.h>
#include <iostream>

using namespace std;

int main()
{
    cout<<"starting interpreter."<<endl;
    Py_Initialize();
    PyRun_SimpleString("print 'Im in python!'");
    Py_Finalize();
    return 0;
}

私のリンク設定は次のとおりです(コンパイラとデバッガ設定のコードブロックGUI内):

linker settings:
    link libraries:
        C:\Python27\libs\libpython27.a
search directories:
    linker:
        C:\Python27\libs

私が見逃しているものはありますか?または私はこれを間違った方法でやっていますか?

ビルド メッセージ:

C:\Users\users_name\Desktop\PythonIntegratedTest\main.cpp|1|error: Python.h: No such file or directory|
C:\Users\users_name\Desktop\PythonIntegratedTest\main.cpp||In function 'int main()':|
C:\Users\users_name\Desktop\PythonIntegratedTest\main.cpp|9|error: 'Py_Initialize' was not declared in this scope|
C:\Users\users_name\Desktop\PythonIntegratedTest\main.cpp|10|error: 'PyRun_SimpleString' was not declared in this scope|
C:\Users\users_name\Desktop\PythonIntegratedTest\main.cpp|11|error: 'Py_Finalize' was not declared in this scope|
4

2 に答える 2

1

エラーメッセージにはPython.h: No such file or directory。これは、コンパイラが要求されたファイルを見つけることができないことを意味します。検索ディレクトリのパスが正しくありません。インクルードする必要のあるヘッダーファイルは、通常、 includeと呼ばれるディレクトリあります。Windows上のPythonの場合、これはあなたの場合です。C:\Python27\include

CodeBlocksでは、。の下のインクルード検索ディレクトリを変更できますSettings - Compiler and debugger - Search directories - Compiler

それを行った後、エラーへの未定義の参照を取得します。エラーメッセージは、コードで関数を使用したことを示しています。コンパイラは、の実装を見つけることができず、(ヘッダーファイル内の)宣言のみを見つけることができます。

実装は、ソースファイルまたは静的ライブラリのいずれかで利用できます。Windows上のCPythonには、事前に構築された静的ライブラリが付属しています。C:\Python27\libs\python26.libそれはあなたの場合の下にあります

それも変更した後、コンパイルは成功するはずです。

于 2012-06-27T06:23:55.997 に答える
0
main.cpp|1|error: Python.h: No such file or directory

コンパイラがインクルード検索パスで Python.h を見つけられないため、コンパイル時エラーになります。コマンド ラインで gcc を使用している場合は、Python インストールのインクルード フォルダーを次のように指定するように伝えます。

-I/path/to/Python27/include

(私の Windows Python 2.7 インストールでは、そのC:\Python27\include)

CodeBlocks でこれを行う方法はわかりませんが、「ヘッダー インクルード パス」を指定する方法は確かにあります。

これは「ライブラリ検索パス」または「リンカー検索パス」と同じではないことに注意してください。これは、特にコンパイラとヘッダーの検索場所用です。

于 2012-06-26T20:36:18.687 に答える