Boost.Python - 暴露一个类
Posted
技术标签:
【中文标题】Boost.Python - 暴露一个类【英文标题】:Boost.Python - Exposing a class 【发布时间】:2013-11-16 16:19:24 【问题描述】:我有以下名为“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>());
在我的 Makefile 中,我正在编译 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 时,我都会得到以下信息:
ImportError: Wav.so: undefined symbol: _ZN8AudioLib3WavC1Eii
我哪里错了?
【问题讨论】:
【参考方案1】:您似乎未能定义第二个构造函数:
Wav(const int M, const int N);
我可以通过使用内联定义制作示例的工作(但简化)副本并仅删除该构造函数的定义来复制错误消息。所以我的建议是仔细检查 Wav.cpp 中的定义,并尝试创建一个内联定义来进行实验。
如果定义确实存在,则链接器标志可能不正确。
【讨论】:
以上是关于Boost.Python - 暴露一个类的主要内容,如果未能解决你的问题,请参考以下文章