使用 cTypes 在 Python 中使用C++库
using C++ libraries in python using ctypes
我有一个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
包装器。
相关文章:
- Ctypes wstring通过引用传递
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- Python ctypes:不会按预期加载 dll
- 将 ctypes 与 tesserac-ocr 一起使用的例外 TessPageIteratorBoundingBox.
- 如何使用 ctypes 停止和重新启动从 Python 运行的C++代码
- python ctypes and C++ pointers
- 无法使用 python ctypes 加载C++共享库
- CPPYY/CTYPES 将字符串数组作为 char* args[] 传递
- 使用 ctypes 时如何替换 libm?
- 为什么这个"ctypes"包装函数的返回值是"c_long(0)"而不是&quo
- ctypes - 结构包含垃圾/不正确的数据
- 通过 Ctypes 将 std:vector 从 C++ 传递到 Python:获取无意义的值
- 使用 Ctypes 调用复杂的 c++ 代码
- 如何使用 CTypes 将 wchar_t** - 以空结尾的 UNICODE 字符串数组 - 返回到 Python 脚
- 如何通过ctypes将列表列表(非空)从Python传递到C++
- 将ctypes c_void_p强制转换为c输出参数
- 为什么在 2019 年我们仍然不能使用 ctypes 从 Python 调用C++?
- 参数的ctypes错误
- 在python-ctypes中声明变量并传递给dll函数