Как скомпилировать Cython с использованием C ++ для получения файлов общего объекта (* .so) - PullRequest
0 голосов
/ 16 июня 2019

Я работаю над кодом Cython, который использует некоторые структуры данных стандартной библиотеки C ++, и я могу скомпилировать код для получения файлов * .cpp.Я делаю это, используя distutils со скриптом установки (см. Код).Однако сейчас я не могу генерировать * .so файлы, и я не уверен, почему.Прежде чем мне понадобилась какая-либо структура данных C ++, сценарий установки смог сгенерировать файлы * .so и * .c.Теперь он просто генерирует * .cpp файлы, и я не могу импортировать их в остальные мои скрипты на python.

Мой скрипт установки был сделан следующим образом вместе с этой документацией: https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html

Дополнительные аргументы компиляции и языковые аргументы позволяют компилировать Cython, который включает в себя c ++

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 голосов
/ 16 июня 2019

Первый аргумент в Extension определяет имя общего объекта, который будет создан. Если имеется несколько источников для компиляции, то отдельные общие объектные файлы не будут созданы для каждого из этих источников, хотя будут созданы отдельные файлы *.c или *.cpp.

...