我目前正在从事的Cython项目包括大约20个C ++文件,这些文件充当C ++实现。在顶部,我构建了三个用Cython编写的扩展模块,每个模块都捕获了C ++实现的不同但相互关联的功能。为了包装C ++所需的功能,我使用了一个定义所有.pxd
块的单个cdef extern
文件。稍后,带有3个扩展模块的3个.pyx
文件(每个.pyx文件一个扩展模块)将导入pxd
包装程序并添加其他功能。
现在,我的目标是打包整个库并使用PyPi分发。使用setup.py时出现我的问题:我不知道如何使C ++代码可用于所有扩展模块。为了进行开发,我已经在Linux中将C ++安装为动态库,这显然存在很多可移植性问题。我非常愿意将C ++源代码导出到本地进行编译(因此使用python setup.py sdist
创建源分发)。
这些是我到目前为止采取的方法,但都失败了:
sources
中包括C ++源文件。它为每个扩展编译所有C ++文件。这将创建全局对象的多个副本。undefined symbol
错误,因为它们无权访问C ++实现。.pxd
包装器的名称创建第四个扩展模块,然后首先将其导入。与上述结果(#2)相同。任何提示将不胜感激!