Я пытаюсь реализовать очень простой код C ++, используя Cython в macOS. Это заголовок моего кода C ++ (это файл с именем cs_test.h
#include<iostream>
void cs_test(int n);
Это мой код C ++ (имя файла: cs_test.cpp
:
#include "cs_test.h"using namespace std;
int main(){}
void cs_test(int n)
{
cout << "This is C++ output: " << n << endl;
}
Это мое pyx
код (имя файла: simulate.pyx
)
import numpy as np
cimport numpy as np
cdef extern from "./cauchy.h" nogil:
void cs_test(int n)
def sim():
cs_test(5)
И, наконец, это мой установочный код (setup.py
)
from distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy
setup(
ext_modules=cythonize("simulate.pyx"),
include_dirs=[numpy.get_include()]
)
Все вышеупомянутые файлы находятся в одной папке. я бегу setup.py
используя эту команду:
python setup.py build_ext --inplace
И я получаю следующие сообщения об ошибках:
In file included from simulate.c:502:0:
./cauchy.h:1:19: fatal error: iostream: No such file or directory
compilation terminated.
error: command 'gcc' failed with exit status 1
В simulate.pyx
, даже когда я заменяю линию cdef extern from "./cauchy.h" nogil:
с cdef extern from "cauchy.h" nogil:
Я все еще получаю то же сообщение об ошибке. Я так понимаю, что сообщение об ошибке об использовании gcc
возможно потому что я работаю с macOS. Но я не знаю, как дать знать код использовать clang++
или же c++
вместо.
Что я здесь не так делаю? Я буду очень благодарен за помощь.
Чтобы заставить Cython генерировать и компилировать код C ++ с помощью distutils, вам просто нужно передать параметр
language="c++"
:from distutils.core import setup from Cython.Build import cythonize setup(ext_modules = cythonize( "rect.pyx", # our Cython source sources=["Rectangle.cpp"], # additional source file(s) language="c++", # generate C++ code ))
Это четко указано на страница документации по использованию C ++ с Cython.
Это установочный файл, который работал для меня. Также я переименовал файл заголовка кода C ++, чтобы он соответствовал имени файла C ++.
import numpy
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension(
name="simulate_cy",
sources=["simulate.pyx", "cs_test.cpp"],
# extra_objects=["fc.o"], # if you compile fc.cpp separately
include_dirs = [numpy.get_include()], # .../site-
packages/numpy/core/include
language="c++",
# libraries=
extra_compile_args = ['-O3'],
# extra_link_args = "...".)
)]
setup(
name = 'simulate_cy',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules,)