如何使用C ++编译Cython以获取共享对象(* .so)文件

时间:2019-06-15 21:49:44

标签: python cython distutils cythonize

我正在研究一些使用某些C ++标准库数据结构的Cython代码,并且能够编译该代码以获取* .cpp文件。我正在将distutils与安装脚本一起使用(请参见代码)。但是现在我无法生成* .so文件,而且我不确定为什么。在需要任何C ++数据结构之前,安装脚本可以生成* .so文件和* .c文件。现在,它仅生成* .cpp文件,而我无法在其余的python脚本中导入它们。

我的安装脚本与以下文档一起制成: https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html

额外的编译参数和语言参数允许包含c ++的Cython编译

from distutils.core import setup
from Cython.Build import cythonize
from distutils.extension import Extension
import numpy

extensions=[
    Extension("mesh",
              sources=["optimized_mesh.pyx"],
              include_dirs=[numpy.get_include()],
              language="c++",
              extra_compile_args=["-stdlib=libc++"])
]

setup(
    ext_modules=cythonize(extensions)
)

我希望输出是* .cpp文件和* .so文件,但是到目前为止,我只能获得* .cpp文件。

编辑:

我发现了所发生的情况,Extension中的第一个参数是要创建的共享库文件的名称。我正在寻找带有源名称的共享对象文件。

1 个答案:

答案 0 :(得分:0)

Extension中的第一个参数定义将要创建的共享库的名称。如果有多个编译源,则尽管将创建单个*.c*.cpp文件,但不会为每个这些源创建单独的共享库文件。