Ubuntu22.04 下 pybind11 搭建,示例

Pybind11 是一个轻量级的库,用于在 C++ 中创建 Python 绑定。Ubuntu22下安装pybind11步骤如下:

1. 安装 pybind11

1.1 pip 命令安装

pip3 install pybind11

 1.2 源代码安装

安装依赖库:

sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/  pytest

运行命令:

git clone https://github.com/pybind/pybind11.git
cd pybind11
mkdir build
cd build
cmake ..
make -j4
sudo make install  

2.示例1:C++ 调用 Python 函数

add.py:

def add (a, b):
    return a + b

CMakeLists.txt:

#1.cmake verson,指定cmake版本

cmake_minimum_required(VERSION 3.2)

#2.project name,指定项目的名称,一般和项目的文件夹名称对应,声明一个cmake工程,工程名为cmakelist_test

PROJECT(pybind11_test)

# #也可以写上项目的版本号,如下所示

# project(cmakelist_test VERSION 0.1.0)

#3.添加c++ 11标准支持,如果程序中使用了C++11标准,则需要设置告诉编译器,没有可以不用写。

set( CMAKE_CXX_FLAGS "-std=c++17")

#4.设置编译器编译模式,对于编译用的Debug模式和调试用的Release模式,在Debug模式中,程序运行较慢,当可以在IDE中进行断点调试,而Release模式则速度较快,但没有调试信息。不设置默认是Debug模式。

set( CMAKE_BUILD_TYPE "Debug")

# 这行命令让 CMake 寻找 Python 3.6 版本(或更高)的库。REQUIRED 表示这个包是必需的;如果找不到,CMake 会报错。

find_package(PythonLibs 3.6 REQUIRED)

# 这行命令让 CMake 寻找 Pybind11 库。同样地,REQUIRED 表示 Pybind11 是构建此项目所必需的。

find_package(pybind11 REQUIRED )

# 这个命令用于向项目添加头文件搜索路径。

# 这里,${PYTHON_INCLUDE_DIRS} 和 ${pybind11_INCLUDE_DIRS} 是由 find_package 命令找到的 Python 和 Pybind11 的头文件目录。

# 这确保了编译器可以找到所有必需的头文件。

include_directories(${PYTHON_INCLUDE_DIRS})

include_directories(${pybind11_INCLUDE_DIRS})

#add executable file,添加要编译的可执行文件,编译main.cpp,生成可执行文件pybind11_test,也可以将pybind11_test写成${PROJECT_NAME},即为当前项目名称,就是#2中PROJECT(pybind11_test)的项目名字pybind11_test

add_executable(pybind11_test src/main.cpp)

# 指定了构建可执行文件 pybind11_test 时需要链接的库。

# ${PYTHON_LIBRARIES} 是 find_package(PythonLibs) 命令找到的 Python 库,

# 而 pybind11::pybind11 是 Pybind11 提供的目标,用于链接 Pybind11 库。这确保了项目在链接时能找到所有必要的库。

target_link_libraries(pybind11_test ${PYTHON_LIBRARIES} pybind11::pybind11)

编译成功后,在 build 文件夹下会出现 pybind11_test 文件,运行文件即可看到运行结果:

 

相关推荐

  1. 【ESP32】Ubuntu2004espressif

    2024-06-08 07:34:04       34 阅读
  2. Ubuntu18Kubernetes集群

    2024-06-08 07:34:04       39 阅读
  3. 【环境Ubuntu16 C++

    2024-06-08 07:34:04       18 阅读
  4. Ubuntu环境SomeIP/CommonAPI环境详细步骤

    2024-06-08 07:34:04       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 07:34:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 07:34:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 07:34:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 07:34:04       18 阅读

热门阅读

  1. Docker 部署 OCRmyPDF、提取PDF内容

    2024-06-08 07:34:04       8 阅读
  2. gitlab远端指定分支回退到之前的版本

    2024-06-08 07:34:04       7 阅读
  3. 【HarmonyOS】应用屏蔽截屏和录屏

    2024-06-08 07:34:04       8 阅读
  4. Git:版本控制的艺术与GitLab实战指南

    2024-06-08 07:34:04       10 阅读
  5. gitlab中配置全局钩子

    2024-06-08 07:34:04       9 阅读
  6. k8s更改master节点IP

    2024-06-08 07:34:04       8 阅读
  7. Vue3 响应式 API:工具函数(一)

    2024-06-08 07:34:04       7 阅读
  8. 在 VSCode 中搭建 Flutter 开发环境并运行项目

    2024-06-08 07:34:04       9 阅读
  9. flutter文件分类模板之modules

    2024-06-08 07:34:04       8 阅读
  10. Docker 容器中运行Certbot获取和管理 SSL 证书

    2024-06-08 07:34:04       9 阅读
  11. 【leetcode】LRU & LFU

    2024-06-08 07:34:04       8 阅读
  12. 力扣1574.删除最短的子数组使剩余数组有序

    2024-06-08 07:34:04       8 阅读
  13. setattr前端接收方法深度解析

    2024-06-08 07:34:04       6 阅读
  14. VmWare的网络配置说明

    2024-06-08 07:34:04       8 阅读