Boost.Python的 - 揭露一类(Boost.Python - Exposing a cla

2019-10-19 00:39发布

我有一个名为“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,我得到以下几点:

导入错误:Wav.so:未定义的符号:_ZN8AudioLib3WavC1Eii

我要去哪里错了?

Answer 1:

它看起来像你没有定义第二个构造:

Wav(const int M, const int N);

我可以通过进行工作(但是简化)的例子的副本与行定义,只是去除构造的定义复制的错误消息。 所以我的建议是,要仔细检查在Wav.cpp的定义,并尝试建立一个在线的定义进行试验。

如果定义不存在,也许是连接标志是不正确的。



文章来源: Boost.Python - Exposing a class
标签: c++ python boost