如何在 cython 中包含 C++ 所需的路径?

Posted

技术标签:

【中文标题】如何在 cython 中包含 C++ 所需的路径?【英文标题】:How to include the path needed by C++ in cython? 【发布时间】:2019-07-23 18:29:29 【问题描述】:

我设法让 Cython 为一个简单的 C++ 文件工作。但是当我试图让它为我们的项目工作时,我遇到了路径问题。

当我运行“python3.6 setup.py build_ext --inplace”时,出现以下错误:

myapp.h:12:10: fatal error: base/file1.h: No such file or directory
 #include <base/file1.h>
          ^~~~~~~~~~~

这是我的文件夹结构:

.
|-- base
|   |-- file1.h
|   \-- file1.cpp
|
|-- app
|   |-- app.pyx
|   \-- setup.py
|
|-- myapp.cpp
\-- myapp.h

这里是 setup.py:

from distutils.core import setup, Extension
from Cython.Build import cythonize

setup(ext_modules = cythonize(Extension(
    "app",
    sources=["app.pyx", "myapp.cpp"],
    language="c++",
)))

在 myapp.h 中有这一行:

#include <base/file1.h>

【问题讨论】:

我认为问题出在#include 上。请尝试更改为#include "base/file1.h"。您正在使用自定义本地头文件,所以双引号。 好点。我试过。它抱怨同样的事情。 cython.readthedocs.io/en/latest/src/userguide/… 中的“配置 c 构建”部分 您需要告诉编译器在哪里搜索包含。对于 GCC 和 Clang,这是通过 -I 开关完成的。对于 Visual Studio 编译器,它是另一回事(但类似)。您需要正确配置您的 biild 系统。 【参考方案1】:

您正在寻找设置的include_dirs 参数。在您的情况下,这应该有效:

setup(...
    include_dirs = ['.'],
     ... )

或者'..',你的目录树有点不寻常。

【讨论】:

以上是关于如何在 cython 中包含 C++ 所需的路径?的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring-security-saml 在 RP 元数据中包含所需的声明

在 Cython 中包装自定义类型 C++ 指针

自动回调以关闭文件记录器类中包含的 fstream

如何在 CMakeLists 中包含库头文件

使用模块和计数时如何在 terraform 中包含标签

使用亚马逊弹性mapreduce服务时如何在hadoop中包含第三方库