为c ++代码编写python包装器

时间:2018-01-30 14:54:58

标签: python c++ numpy cython

我修改了一个C ++代码(Kraskov_v1.C),现在我想用Python调用它。

我能够将C ++代码(Kraskov_v1.C)转换为.so文件并将其集成到我的python库中。但是,当我尝试导入库时,它会引发错误。该错误表示"未定义的符号:_Z8mir_xnynPPdiiiiS_S_S _"

mir_xn_yn是我的Kraskov_v1代码调用的函数(用另一个c ++文件编写,即miutils)。我包含了头文件

包括" miutils.h"

在我的文件中包含Kraskov_v1。

这是我编写的用于构建和安装此软件包的setup.py文件。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import numpy.distutils.misc_util

setup(name='Kraskov_v1',
      version='0.1.0',
      ext_modules=[Extension('_Kraskov_v1',sources =        
      ["Kraskov_v1.i","Kraskov_v1.C"],
      include_dirs = ['src'])
      ])

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

有人能告诉我什么是错的吗?我是python和c ++的新手,非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

Extension需要在编译后链接的库列表。

缺少符号表示所需的库未链接到共享对象(.so),并且该库中的定义不可用。

setup(name='Kraskov_v1',
      version='0.1.0',
      ext_modules=[Extension('_Kraskov_v1',sources =        
          ["Kraskov_v1.i","Kraskov_v1.C"],
          include_dirs = ['src']),
          libraries=['kraskov', <..>],
      ])