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

时间:2019-09-05 21:28:43

标签: python c++ ubuntu cmake pybind11

我想用pybind11构建简单的应用程序,pybind已经通过cmake安装在我的Ubuntu系统中(并进行安装)。我使用这个简单的cmake文件:

Environment Variables

这是main.cpp:

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)

建造时,我得到:

#include <iostream>
#include <pybind11/embed.h>
namespace py = pybind11;

using namespace std;
int main(){return 0;}

如何解决此问题? (已经安装了python-dev和python3-dev,Python.h可用)

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

Wenzel Jakobanswer之后,我想举一个CMakeLists.txt的示例来编译this tutorial中提供的示例:

// 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 。我还写了一些说明here,用于编译/安装pybind11

答案 2 :(得分:0)

也许只安装 Python 头文件?例如,在 Ubuntu 上,您可以安装 sudo apt-get install python-dev(或 python3-devpythonX.Y-dev)软件包。这可以解决这个问题。