[英]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>());
}
在我的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:未定义的符号:_ZN8AudioLib3WavC1Eii
我要去哪里错了?
看来您未能定义第二个构造函数:
Wav(const int M, const int N);
我可以通过使用内联定义对示例进行工作(但简化)的复制并删除该构造函数的定义来复制错误消息。 因此,我的建议是仔细检查Wav.cpp中的定义,然后尝试创建内联定义进行实验。
如果定义确实存在,则链接器标志可能不正确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.