首页 > 解决方案 > Cython 包含 catkin_pkg 设置错误

问题描述

我在setup.py中使用以下代码来制作c++ 类的 python 包装器:

## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD
from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup

setup_args = generate_distutils_setup(
    packages=['hw_interface_pkg'],
    package_dir={'': 'src'},
    requires=['std_msgs', 'rospy'],
)
setup(**setup_args)

我得到的错误是:

/src/cython/hw_interface.c:482:
/include/remote_hw.h:6:10: fatal error: array: No such file or directory
 #include <array>
          ^~~~~~~

这是标题中的第一个包含。在这个线程这个线程这个线程之后,主要解决方案似乎是language="c++"在参数中添加。但是,这并没有解决我的问题,并且上面的代码也与那些线程中使用的代码有很大不同。(它使用“generate_distutils_setup”而不是“cythonize”或“Extension”)。

除了标准的 c++ 包括 like 之外#include <array>,还有其他一些我不确定安装程序是否会找到它们。有人可以为此提出一个可能的解决方案吗?这个问题实际上是否源于 CMakelists.txt 详细信息?

标签: pythonc++cythonrosinclude-path

解决方案


解决方案是在子 CMakeLists.txt 中添加如下所示的“set_source_files_properties”。

... 
set_source_files_properties(hw_interface.pyx PROPERTIES CYTHON_IS_CXX TRUE)
cython_add_module(hw_interface hw_interface.pyx ../fibonacci.cpp)
...

推荐阅读