IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python调用C++(实战篇) -> 正文阅读

[Python知识库]Python调用C++(实战篇)

内容主要参照该博文:https://blog.csdn.net/qq_44843469/article/details/122116098
流程为:创建c++工程(含配置)——使用CMake编译——python导入调用
环境配置见《环境配置篇》:https://blog.csdn.net/qq_33339770/article/details/125797425

一、创建C++工程

1、创建工程

打开VS2019-创建新项目-创建空项目-配置新项目
在这里插入图片描述在这里插入图片描述

2、创建脚本(创建源文件)

右键“源文件”-添加-新建项
在这里插入图片描述
这里.cpp文件的名字最好用英文:
在这里插入图片描述
源文件创建好了,就来写段代码吧,这里写个简单的“Hello,World”:
注意:脚本中“PYBIND11_MODULE(hello, m)”里的“hello”将会是最终python用来引用的库包名(import hello)

#include <pybind11/pybind11.h>

namespace py = pybind11;

PYBIND11_MODULE(hello, m) {

    m.doc() = "pybind11 example module";

    // Add bindings here
    m.def("prt", []() {
        return "Hello, World!";
    });
}

写完之后会发现include不对,这里就需要配置一下项目属性了。

3、配置项目属性:

点击界面最上方“项目”-“属性”,进入属性配置页面,配置“Release”,平台为“x64”:
!!!重要:如果引用目录配置好了但是还是一直报错,一定要检查这里是不是配置对了,点开“配置管理器”检查。
在这里插入图片描述
(1)配置“附加包含目录”:
在这里插入图片描述
添加Anaconda的include目录(D:\Anaconda3\include)、pybind的include目录(D:\Anaconda3\Lib\site-packages\pybind11\include):
如果安装了pytorch,torch的include目录中含有pybind11,包含此目录即可引入pybind11。
在这里插入图片描述
如果包含pybind11.h头文件还是不成功的话,可以改成下载好的pybind11源码的目录:“***pybind11\include”,该地址是从https://github.com/pybind/pybind11下载的pybind11的源码,解压后的文件夹如下图:
在这里插入图片描述
如果还是没有成功的话orz,只能采用最直接的手段了——将include文件中的pybind11文件夹复制到当前包含头文件的目录下就可以了。
(2)配置链接器:
在这里插入图片描述
这里需要添加“python37.lib”和“python3.lib”
在这里插入图片描述
到这里就配置完成了。
如果是用Anaconda3自带的python,应该是没有这两个lib文件的,可以下载python安装程序,安装Debug版本的python3.7,安装目录选到Anaconda3目录下,替换自带python,就会有这两个lib文件了。
在这里插入图片描述

二、使用CMake编译

1、创建文件

在C++工程-Project1的文件夹内:
(1)创建“build”文件夹,此文件夹用于编译;
(2)将从Github下载的pybind11的源码压缩包解压,解压后文件夹重命名为“pybind11”,并拷贝到Project11文件夹下;(add_subdirectory()需要用到)
(3)创建“CMakeLists.txt”,内容如下:

cmake_minimum_required(VERSION 2.8.12)
project(hello)
add_subdirectory(pybind11)
pybind11_add_module(hello hello.cpp)

完成之后的工程目录如下图:
在这里插入图片描述

2、使用CMake编译

打开cmake-gui,两种方法打开都行:
在这里插入图片描述
在这里插入图片描述
打开后选择源码文件夹和build文件夹:
在这里插入图片描述
完成后点击“configure”,出现“Configuring done”再点击“Generate”,出现“Generating done”就OK了。
在这里插入图片描述
完成之后,在“build”文件夹里面出现了一个新的C++工程,但是没有.cpp文件:
在这里插入图片描述
在 VS中打开这个工程,也可以点击cmake-gui界面上的“Open Project”打开:
在这里插入图片描述
点击上方的“生成”-“生成hello”:
在这里插入图片描述
生成成功,这个.pyd就是成果了:
在这里插入图片描述

三、Python导入调用

生成好的.pyd文件还不能直接被python导入,需要放在python能够找到的路径下,即python库包统一存放的位置“**/Lib/site-packages”。
这里用的Anaconda自带的python,所以直接拷贝放在D:\Anaconda3\Lib\site-packages目录里面了。
在这里插入图片描述
放好之后就可以打开python放心调用了:
在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:47:30  更:2022-07-20 18:47:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 2:30:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计