Cython与C ++ |编译错误(未找到C ++头文件)|苹果系统

By simon at 2018-02-28 • 0人收藏 • 52人看过

我正试图在macOS中使用Cython实现一个非常简单的C ++代码。这是 我的C ++代码的头文件(它是一个名为999的文件999999960

#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)
最后,这是我的设置代码(
from distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy

setup(
    ext_modules=cythonize("simulate.pyx"),
    include_dirs=[numpy.get_include()]
)  
0)
from distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy

setup(
    ext_modules=cythonize("simulate.pyx"),
    include_dirs=[numpy.get_include()]
)  
所有上述文件都在s中ame文件夹。我使用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:,我仍然收到相同的错误信息。我明白那个e错误 有关使用gcc的消息可能是因为我正在使用macOS。 但是,我不知道如何让代码知道使用clang++或 改为c++。 我在这里做错了什么?我将非常感谢你的帮助。

3 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

为了让Cython用distutils生成和编译C ++代码,你只需要 通过选项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(http://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html#指定-C -language合设置-PY)。

2018-02-28   #2

这是为我工作的设置文件。我也重新命名了头文件 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,)

2018-02-28   #3

为了让Cython用distutils生成和编译C ++代码,你只需要 通过选项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(http://cython.readthedocs.io/en/latest/src/userguide/wrapping_CPlusPlus.html#指定-C -language合设置-PY)。

登录后方可回帖

Loading...