LoginSignup
2
3

C++からPythonのライブラリ関数を呼び出す/複素数関数

Posted at

ソースコード

main.cpp

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

int main(int argc, char *argv[])
{
    Py_Initialize();
    PyObject *mpmath = PyImport_ImportModule("mpmath");
    PyObject *zeta = PyObject_GetAttrString(mpmath, "zeta");
    PyObject *pArgs = PyTuple_New(1);
    PyTuple_SetItem(pArgs, 0, PyComplex_FromDoubles(1.0, 1.0));    
    PyObject *ret = PyObject_CallObject(zeta, pArgs);

    const Py_complex a = {};
    if (PyArg_Parse(ret, "D", &a))
    {
        std::cout << a.real << std::endl;
        std::cout << a.imag << std::endl;
    }

    return 0;
}

APIドキュメントへのリンク:
PyImport_ImportModule
PyObject_GetAttrString
PyTuple_New
PyComplex_FromDoubles
PyTuple_SetItem
PyObject_CallObject
PyArg_Parse (フォーマット指定文字)

コンパイルのコマンド例

環境依存なので適宜修正して使用してください。

compile.bat

g++ main.cpp -o call_py_func_from_c -LC:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python38\libs -lpython38 -IC:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python38\include

-Lライブラリのパス
-lライブラリのファイル名 ・・・(拡張子.lib部分を除く)
-Iインクルードパス ・・・Python.hがあるフォルダを指定

環境

Windows11
Python3.8
Mingw64 (g++を導入するため)

使用するライブラリはpipでinstallしておく必要あり。

参考サイト

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3