为了账号安全,请及时绑定邮箱和手机立即绑定

使用 cmake 和 pybind11 构建示例应用程序时找不到 Python.h

使用 cmake 和 pybind11 构建示例应用程序时找不到 Python.h

慕雪6442864 2022-05-19 16:02:20
我想用 pybind11 构建简单的应用程序,pybind 已经用 cmake 安装在我的 Ubuntu 系统中(并进行安装)。我使用这个简单的 cmake 文件:cmake_minimum_required(VERSION 3.0 FATAL_ERROR)project(trt_cpp_loader )find_package(pybind11 REQUIRED)add_executable(trt_cpp_loader main.cpp)set_property(TARGET trt_cpp_loader PROPERTY CXX_STANDARD 11)这是 main.cpp:#include <iostream>#include <pybind11/embed.h>namespace py = pybind11;using namespace std;int main(){return 0;}当我构建它时,我得到:In file included from /usr/local/include/pybind11/pytypes.h:12:0,                 from /usr/local/include/pybind11/cast.h:13,                 from /usr/local/include/pybind11/attr.h:13,                 from /usr/local/include/pybind11/pybind11.h:44,                 from /usr/local/include/pybind11/embed.h:12,                 from /home/stiv/lpr/trt_cpp_loader/main.cpp:2:/usr/local/include/pybind11/detail/common.h:112:10: fatal error: Python.h: No such file or directory #include <Python.h>          ^~~~~~~~~~compilation terminated.我该如何解决这个问题?(python-dev 和 python3-dev 已经安装,Python.h 可用)
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

对于创建扩展模块的默认情况,您需要使用pybind11_add_module命令(请参阅https://pybind11.readthedocs.io/en/stable/compiling.html#building-with-cmake )。

如果目标确实是将 Python 嵌入到可执行文件中,那么您有责任将 Python 头文件和库显式添加到 CMake 中的编译器/链接器命令中。(有关如何执行此操作,请参阅https://pybind11.readthedocs.io/en/stable/compiling.html#embedding-the-python-interpreter )


查看完整回答
反对 回复 2022-05-19
?
波斯汪

TA贡献1811条经验 获得超4个赞

按照Wenzel Jakob的回答,我想举一个示例CMakeLists.txt来编译本教程中提供的示例:


// example.cpp


#include <pybind11/pybind11.h>


int add(int i, int j) {

    return i + j;

}


PYBIND11_MODULE(example, m) {

    m.doc() = "pybind11 example plugin"; // optional module docstring


    m.def("add", &add, "A function which adds two numbers");

}


# example.py


import example


print(example.add(1, 2))


# CMakeLists.txt


cmake_minimum_required(VERSION 2.8.12)

project(example)


find_package(pybind11 REQUIRED)

pybind11_add_module(example example.cpp)

现在在根运行


cmake .

make

现在运行python代码


python3 example.py

PS我还在这里写了一些关于编译/安装pybind11.


查看完整回答
反对 回复 2022-05-19
  • 2 回答
  • 0 关注
  • 780 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信