Boost.Python暴露一个类

2024-10-03 13:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为“Wav”的类,它存储在另一个目录中,文件为“Wav.h”和波浪.cpp“看起来如下:

enum ReadType {
   NATIVE = 0,
   DOUBLE,
};

namespace AudioLib {
    class Wav : public Signal {
        public: 

           Wav(); 
           Wav(const int M, const int N);

           ///...  ->
    };
 };

cpp文件包含这个类的实现,一切都可以很好地编译。在

我尝试使用boost.python并保存以下文件:

^{pr2}$

在我的Makefile中,我正在编译波浪.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

我哪里出错了?在


Tags: 文件目录targetsoversionenumpubliccpp
1条回答
网友
1楼 · 发布于 2024-10-03 13:24:42

您似乎未能定义第二个构造函数:

Wav(const int M, const int N);

我可以复制错误消息,方法是用内嵌定义创建一个有效的(但简化的)示例副本,然后删除该构造函数的定义。所以我的建议是仔细检查波浪.cpp试着创造一个新的定义。

如果定义确实存在,可能链接器标志不正确。

相关问题 更多 >