我想用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可用)
答案 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 Jakob的answer之后,我想举一个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-dev
或 pythonX.Y-dev
)软件包。这可以解决这个问题。