使用 cTypes 在 Python 中使用C++库

using C++ libraries in python using ctypes

本文关键字:C++ cTypes Python 使用      更新时间:2023-10-16

我有一个C++库,它提供了用于管理数据的各种类。我有库的源代码。我正在尝试使用 ctypes 从 python 调用 lda.cpp 这个库的函数。此函数又使用库中所有其他.cpp文件中的函数。

//lda.cpp
#include "model.h"
#include <stdio.h>
#include "lda.h"
int lda_est(double alpha, double beta) {
    model lda;
    if (lda.model_est(alpha, beta)) {
         return 1;
    }
    lda.estimate();
    return 0;
}

我发现我需要使用C++包装器将函数声明为 extern,然后将它们编译为 .so 文件。我的问题是我应该如何制作这个包装器文件?我应该将库中的所有函数声明为 extern 还是仅声明我想从 python 调用的函数?

ctypes是一个

集成您无法更改的现有库的工具。既然你有源代码并愿意改变它们,你也可以用C++编写一个Python模块,其中有多个工具包,例如Boost.Python。换句话说,@Deleisha是对的,ctypes是错误的工具。

请注意,您仍然可以通过包装函数和类从现有库创建 Python 模块。使用工具包而不是extern "C"包装器在那里仍然有意义。首先,它简化了包装类,其次,你不需要C++中的extern "C"包装器和Python中的另一个ctypes包装器。