通过pybind11来实现python调用C++接口(一)
有小伙伴很好奇,怎么样实现python调用C++接口?哈哈,手把手教程来了。
第一步:我们需要安装pybind11这个纯头文件的库,目前该库支持c++11及以上版本,在你的环境中通过命令行输入:
apt-get install python3-dev
apt-get install python3-pip
pip install pybind11第二步:通过宏“PYBIND11_MODULE”,传入Python 模块名和 C++ 实例对象名的两个参数:
// pybind.cpp
#include <pybind11/pybind11.h>        // pybind11的头文件
namespace py = pybind11;               // 给pybind11命名空间名称用个简单的替换
PYBIND11_MODULE(pythondemo, m)             // 定义Python模块,名称为pythondemo
{
  m.def("info",                        // 定义模块pythondemo一个叫info的Python函数
    []()                              // lambda表达式
    {
      py::print("当前C++的版本是", __cplusplus);  // pybind11自己的打印函数
    }
  );  
  m.def("add",                       // 定义模块pythondemo一个叫add的Python函数
    [](int a, int b)                 // 有参数的lambda表达式
    {
      py::print("a = ", a, " b = ", b);
      return a + b;
    }
  );  
}第三步:通过命令编译c++源码:
g++ pybind.cpp -std=c++11 -shared -fPIC `python3 -m pybind11 --includes` -o pythondemo`python3-config --extension-suffix`这条命令之后会产生一个动态库:
pythondemo.cpython-310-x86_64-linux-gnu.so
对上面的这条命令做一下介绍:
g++ pybind.cpp :需要编译的源文件
-std=c++11 -shared -fPIC:编译成动态库
`python3 -m pybind11 --includes` :获得包含路径
-o pythondemo`python3-config --extension-suffix` :生成的动态库名字,pythondemo和C++代码中的模块名保持一致第四步:写python代码,调用很方便的:
import pythondemo            # 导入pybind11模块
pythondemo.info()            # 调用C++写的函数
x = pythondemo.add(1,2)      # 调用C++写的函数
print(x)执行结果:
好了,现在环境都应该是可以了,我们下一期讲讲怎么通过class的方式被python调用,以及python如何调用C++常用的string,vector等标准容器。
上一篇:海康工业相机SDK开发介绍
                                                            相关文章
- Spring Boot中对接Twilio以实现发送验证码和验证短信码
- Spring Boot 3.5:这次更新让你连配置都不用写了,惊不惊喜?
- Spring Boot+Pinot实战:毫秒级实时竞价系统构建
- SpringBoot敏感配置项加密与解密实战
- SpringBoot 注解最全详解,建议收藏!
- Spring Boot 常用注解大全:从入门到进阶
- SpringBoot启动之谜:@SpringBootApplication如何让配置化繁为简
- Springboot集成Kafka原理_spring集成kafka的原理
- Spring Boot中@Data注解的深度解析与实战应用
- 大佬用1000字就把SpringBoot的配置文件讲的明明白白!

