我使用cython --cplus example.pyx编译.pyx文件,但是只生成了.cpp文件,没有生成.hpp文件,是为什么呢
时间: 2023-12-24 12:02:57 浏览: 84
Cython默认会生成一个名为`example.cpp`的文件,这个文件包含了C++代码和Cython代码的混合。而`.hpp`文件是C++中的头文件,它包含了函数声明和类定义等信息,通常在编译时由编译器自动生成。
如果你需要生成`.hpp`文件,可以在`setup.py`中添加以下语句:
```python
from distutils.extension import Extension
from Cython.Build import cythonize
extensions = [Extension("example", ["example.pyx"], language="c++")]
# 添加以下两行代码
for e in extensions:
e.cython_directives = {"language_level": 3}
ext_modules = cythonize(extensions)
```
这里的`cython_directives`用于指定Cython的编译选项,`language_level`用于指定Cython的语言级别,可选值为`2`或`3`,默认为`2`。指定为`3`后,生成的C++代码中将包含更多的类型检查和异常处理等信息,但也会带来一些性能损失。
使用以上代码后,运行`python setup.py build_ext --inplace`命令即可生成`.cpp`和`.hpp`文件。
相关问题
cython -3 shttp.pyx --embed gcc -Os -I /usr/include/python3.6m -o shttp shttp.c -lpython3.6m -lpthread -lm -lutil -ldl #rm shttp.py rm shttp.pyx rm shttp.c
根据您提供的信息,这是在构建一个为 `shttp` 的项目时执行的一些命令。这些命令执行了以下操作:
1. `cython -3 shttp.pyx --embed`
此命令使用 Cython 将 `shttp.pyx` 文件编译为 C 代码。`--embed` 参数用于生成一个可嵌入 Python 解释器的 C 代码。
2. `gcc -Os -I /usr/include/python3.6m -o shttp shttp.c -lpython3.6m -lpthread -lm -lutil -ldl`
该命令使用 gcc 编译器将生成的 C 代码 `shttp.c` 编译为可执行文件 `shttp`。它还链接了 Python 解释器和其他一些库。
3. `rm shttp.pyx`
此命令删除已编译为 C 代码的源文件 `shttp.pyx`。
4. `rm shttp.c`
此命令删除已编译的 C 代码文件 `shttp.c`。
请注意,这些命令中的路径和文件名是根据您提供的信息推测的,实际应用中可能会有所不同。如果您遇到任何错误或问题,请确保文件路径和名称正确,并确保您已安装所需的软件和库。
如果您有任何其他疑问,请随时提问。
阅读全文