Boost.Python - 公开一个类
Boost.Python - Exposing a class
>我有以下名为"Wav"的类,它存储在另一个目录中,文件为"Wav.h"和"Wav.cpp",如下所示:
enum ReadType {
NATIVE = 0,
DOUBLE,
};
namespace AudioLib {
class Wav : public Signal {
public:
Wav();
Wav(const int M, const int N);
///... ->
};
};
.cpp文件包含此类的实现,一切都编译良好。
我正在尝试使用 boost.python 实现 Python 包装器,并有以下文件:
#include <boost/python.hpp>
#include "../src/Wav/Wav.h"
using namespace boost::python;
BOOST_PYTHON_MODULE(Wav)
{
class_<AudioLib::Wav>("Wav",
init<const int, const int>());
}
在我的制作文件中,我正在编译 Wav.cpp:
# Compile the .wav Python and Cpp file
$(WAV_TARGET).so: $(WAV_TARGET).o
g++ -shared -Wl,--export-dynamic $(WAV_TARGET).o -L$(BOOST_LIB) -lboost_python -
lboost_python -L/usr/lib/python$(PYTHON_VERSION)/config -lpython$(PYTHON_VERSION) -o
$(WAV_TARGET).so
$(WAV_TARGET).o: $(WAV_TARGET).cpp
g++ $(CFLAGS) ../src/Wav/Wav.cpp -I$(PYTHON_INCLUDE) -I$(BOOST_INC) -fPIC -c
$(WAV_TARGET).cpp
每当我尝试导入到Python时,我都会得到以下信息:
导入错误: Wav.so: 未定义的符号: _ZN8AudioLib3WavC1Eii
我哪里出错了?
看起来您未能定义第二个构造函数:
Wav(const int M, const int N);
我可以通过使用内联定义制作示例的工作(但简化)副本并删除该构造函数的定义来复制错误消息。所以我的建议是仔细检查 Wav 中的定义.cpp并尝试创建一个内联定义进行实验。
如果定义确实存在,则链接器标志可能不正确。
相关文章:
- 如何在C++中使用pybind11加载一个pickle python列表
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 我想通过带有C++和Python的插件创建一个可扩展的应用程序
- 有没有一个 c++ gmp 库函数与 python gmpy2 库 divm(..) 函数相同?
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针
- 如何构建一个 setup.py 来编译C++使用 Python、pybind11 和 Mingw-w64 的扩展?
- 在 c++ 中创建一个类似 python 的列表
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- 如何制作一个满足SWIG中接口的python类
- 在使用PyInstaller冻结Python脚本时包含一个C++可执行文件
- 加快一个长python代码的速度,因为只有一个块,所以速度很慢
- 如何创建一个接口,允许我访问C++中的按钮(和其他ui)函数,该函数是使用python中的MFC实现的
- OpenCV - 打开一个从C++到Python的XML文件
- 将多个C 类包装成一个Python类
- 调用一个 Python 函数,其中包含来自 boost Python 的可变数量的输入参数
- 包装一个使用char**[in/out]的C函数调用,以在cython中返回一个python列表
- 从C++库创建一个Python包
- redhawksdr导出一个Python脚本和一个c++组件
- 用c++创建一个python对象并调用它的方法
- 是否有可能完全扁平化一个python包,完全删除目录