ホームページ  >  記事  >  バックエンド開発  >  Python で C++ コードを使用する方法

Python で C++ コードを使用する方法

(*-*)浩
(*-*)浩オリジナル
2019-07-04 09:20:174972ブラウズ

Python の利点は高い開発効率と使いやすさであり、C の利点は高い操作効率であることは誰もが知っています。Python プロジェクトに C コードを埋め込む場合でも、Python を使用してペリフェラルを実装する場合でも、この 2 つは相互に補完できます。 C プロジェクト関数では、Python が C モジュールを呼び出す必要がある場合があります。

Python で C++ コードを使用する方法

#次は、一元化された C コードを Python インターフェイスにエクスポートするためのメソッドのリストです。 . 一緒に学びましょう。

元のエクスポート (推奨学習: Python ビデオ チュートリアル)

Python インタープリターは C で実装されているため、 C データ構造が Python で理解できる限り、理論的には直接呼び出すことができます。 test1.cpp を次のように実装します

#include <Python.h>
int Add(int x, int y)
{
return x + y;
}
int Del(int x, int y)
{
return x - y;
}
PyObject* WrappAdd(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Add(x, y));
}
PyObject* WrappDel(PyObject* self, PyObject* args)
{
int x, y;
if (!PyArg_ParseTuple(args, "ii", &x, &y))
{
return NULL;
}
return Py_BuildValue("i", Del(x, y));
}
static PyMethodDef test_methods[] = {
{"Add", WrappAdd, METH_VARARGS, "something"},
{"Del", WrappDel, METH_VARARGS, "something"},
{NULL, NULL}
};
extern "C"
void inittest1()
{
Py_InitModule("test1", test_methods);   
}

コンパイル コマンドは次のとおりです

g++ -fPIC -shared test1.cpp -I/usr/include/python2.7 -o test1.so

-fPIC: 動的接続に適した、位置に依存しないターゲット コードを生成します。 ;
- L パス: パス ディレクトリでライブラリ ファイルを検索することを意味します (-L など)。現在のディレクトリで検索することを意味します。
-I パス: パス ディレクトリでヘッダー ファイルを検索することを意味します。 -o file: 出力ファイルをファイルとして指定します;
-shared: 共有ライブラリ ファイルを生成します;

Python インタープリターを実行し、次のようにテストします

>>> import test1
>>> test1.Add(1,2)
3

ここで注意すべき点がいくつかあります

生成されるダイナミック ライブラリの名前が test1 の場合、ソース ファイルには inittest1 関数が含まれている必要があり、Py_InitModule の最初のパラメータは "test1" である必要があります。 ", そうしないと、Python インポート モジュールは失敗します。

cpp ソース ファイルの場合、inittest1 関数を extern "C" で変更する必要があります。c ソース ファイルの場合、これは必要ありません。その理由は、Python インタプリタはライブラリをインポートするときに initxxx などの関数を検索し、C と C では関数シンボルのエンコード方法が異なるためです。C では、関数シンボルをエンコードするときに関数の長さとパラメータの型が考慮されます。具体的には、nm test1 を渡すことができます。関数シンボルをチェックすると、c filt ツールはシンボルを通じて関数プロトタイプをデコードできます。

Python 関連の技術記事の詳細については、

Python チュートリアル 列にアクセスして学習してください。

以上がPython で C++ コードを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。