boost.python编辑,以及c++api的python封装
boost.python 编辑与踩坑
踩坑
1、编辑的版本使用的vs版本不同的话,使用的命令不同
2、编辑第一条命令b2 toolset=msvc-11.0 --with-python
报错:fatal error c1083:无法打开inttypes.h文件
在网上查这个文件是vs自带的,因此可以直接去下载
下一步
3、link即可,下面附上完整的boost.python操作文档
Windows平台编译 Boost.Python
1. Boost 下载
链接:https://dl.bintray.com/boostorg/release/;
这里下载了boost_1_69_0;
2. 解压,进入编译环境
解压缩后,通过VS Build tools (或通过 VS2012-工具-VisualStudio
命令提示)进入 boost库 ,进行编译的步骤:
將目录cd到 boost_1_69_0 下执行
3. python首先确保 python 是否存在
键入 python(或者 where python) ,确保可以执行到需要编译的
python版本;
c:\boost_1_69_0>where python
C:\Python37\python.exe
4. 然后执行 bootstrap.bat
4.1 选择参数
可选 需要编译的编译器版本;
Visual Studio 2012 : vc11
Visual Studio 2013 : vc12
Visual Studio 2015 : vc14
我们使用 VS2012 即可以编译v110版本;
bootstrap.bat
或
bootstrap.bat vc11
4.2 执行 bootstrap.bat 例子:
c:\boost_1_69_0>bootstrap.bat vc11
Building Boost.Build engine
Bootstrapping is done. To build, run:
.\b2
To adjust configuration, edit 'project-config.jam'.
Further information:
- Command line help:
.\b2 --help
- Getting started guide:
http://boost.org/more/getting_started/windows.html
- Boost.Build documentation:
http://www.boost.org/build/doc/html/index.html
4.3 文件查看
执行 bootstrap.bat
成功执行后,会在boost根目录下生成 bootstrap.log 、 b2.exe 、
bjam.exe 。
其中可查看 bootstrap.log 查看运行结果;
bjam.exe 和 b2.exe 两个作用一样,
bjam.exe 对应的是老版本, b2 是 bjam 的升级版本。
5. 编译boost.python:
b2 toolset=msvc-11.0 --with-python
5.1 可选参数:
--toolset=msvc-11.0
指编译器为vc110的VS2012;
--with-python
只编译指定的库,如输入--with-python就只编译python库了
link
生成动态链接库(=static)/静态链接库(=shared)
runtime-link
动态/静态链接C++运行库,有shared和static两种方式
threading=multi
单/多线程编译,一般写多线程,直接指定为multi
--build-type=complete
编译所有版本
5.2 可以通过 b2 --help 查看更多参数;
例子:
c:\boost_1_69_0>b2 --help
Boost.Build 2018.02-git
Usage:
b2 [options] [properties] [install|stage]
(此处省略...)
--with-<library> Build and install the specified <library>.
option is used, only libraries specified
option will be built.
Properties:
toolset=toolset Indicate the toolset to build with.
link=static|shared Whether to build static or shared libraries
threading=single|multi Whether to build single or multithreaded bi
(此处省略...)
6. 查看编译结果:
编译的过程会比较长,最后会在boost目录下面生成两个文件夹
stage : 对应的lib和dll文件
bin.v2 : 编译时的中间文件,可以直接删除掉
可查看到已经编译好的python37 boost库;
boost_1_69_0/stage/lib$ ls -lrt
-rw-r--r-- 1 26583808 四月 25 15:18 libboost_python37-vc110-mt-gd-x32
-rw-r--r-- 1 6258968 四月 25 15:18 libboost_numpy37-vc110-mt-gd-x32-
-rw-r--r-- 1 6121450 四月 25 15:19 libboost_python37-vc110-mt-x32-1_
-rw-r--r-- 1 830718 四月 25 15:20 libboost_numpy37-vc110-mt-x32-1_6
-rw-r--r-- 1 31016626 四月 25 15:21 libboost_python37-vc110-mt-gd-x64
-rw-r--r-- 1 6717140 四月 25 15:21 libboost_numpy37-vc110-mt-gd-x64-
-rw-r--r-- 1 7392556 四月 25 15:22 libboost_python37-vc110-mt-x64-1_
-rw-r--r-- 1 943414 四月 25 15:23 libboost_numpy37-vc110-mt-x64-1_6
然后讲讲我封装的简单步骤:
API封装步骤
API封装大体分为三部分:主动请求函数、回调函数、封装回调内容函数
主动请求函数:python主动发送请求到c++的函数
回调函数:根据某主动请求函数回调某c++函数的函数
封装回调内容函数:将c++中回调函数处理后的内容使用boost库进行封装,形成python可以调用的形式。
主动请求函数封装:python脚本引用c++api模块,创建一个api对象调用c++非静态成员函数,利用boost库将主动请求函数和c++里面对应的函数绑定,根据绑定的c++函数将python的内容解析成c++可识别的。
回调函数封装:this指针将主动请求的内容发到父类里进行处理后,将处理后的内容返回将该内容塞到队列里,根据工作线程从队列里取数据,转化成python对象。
封装回调函数:使用boost库将在队列里转换成python对象的数据进行封装一遍,然后调用python的回调函数。
(注意:所有的主动函数、回调函数都是继承父类的)
boost.python编辑,以及c++api的python封装的更多相关文章
- python 调用github的api,呈现python的受欢迎的程度
1 使用api调用数据: 在浏览器的地址栏中输入: https://api.github.com/search/repositories?q=language:python&sort=star ...
- python为前端提供API
作为一名前端来学习后端语言,有难度啊.这里把第一次尝试的过程做个记录 1.网上看到Python给前端提供API可以使用python的flaskweb框架 #py文件 import json from ...
- 实验 7 : OpenDaylight 实验 —— Python 中的 REST API 调用
实验 7 : OpenDaylight 实验 -- Python 中的 REST API 调用 一.实验 目的 对 Python 调用 OpenDaylight 的 REST API 方法有初步了解. ...
- ARCGIS API for Python进行城市区域提取
ArcGIS API for Python主要用于Web端的扩展和开发,提供简单易用.功能强大的Python库,以及大数据分析能力,可轻松实现实时数据.栅格数据.空间数据等多源数据的接入和GIS分析 ...
- python调用openstack的api,create_instance的程序解析
python调用openstack的api,create_instance的程序解析 2017年10月17日 15:27:24 CloudXli 阅读数:848 版权声明:本文为博主原创文章,未经 ...
- Python+Flask搭建mock api server
Python+Flask搭建mock api server 前言: 近期由于工作需要,需要一个Mock Server调用接口直接返回API结果: 假如可以先通过接口文档的定义,自己模拟出服务器返回结果 ...
- Python获得百度统计API的数据并发送邮件
Python获得百度统计API的数据并发送邮件 小工具 本来这么晚是不准备写博客的,当是想到了那个狗子绝对会在开学的时候跟我逼逼这个事情,所以,还是老老实实地写一下吧. Baidu统计API的使 ...
- python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用
python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用 redispy安装安装及简单使用:https://github.com/andymccurdy/r ...
- Python 调用图像融合API
Python 调用图像融合API 本文记录使用Python,调用腾讯AI开放平台的图像融合API.官网给出的Demo用的是PHP,博主作为Python的粉丝,自然想用它来和『最好的』的语言一较高下,顺 ...
- Selenium2+python自动化-查看selenium API
前面都是点点滴滴的介绍selenium的一些api使用方法,那么selenium的api到底有多少呢?本篇就叫大家如何去查看selenium api,不求人,无需伸手找人要,在自己电脑就有. pydo ...
随机推荐
- 【学习日志】@NotNull注解不生效问题
后端API需要接受fe传过来的参数,就必然涉及到参数校验. Spring提供了使用注解进行非法判断的引用(需要主动引入),继承自 spring-boot-starter-parent <depe ...
- Nginx 05 动静分离
1 动静分离简介 为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源,如图片.js.css等文件,可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时, ...
- P31_全局配置 - window - 设置上拉触底的距离
window 设置上拉触底的距离 概念:上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为. 设置步骤: app.json -> window -> 为 o ...
- 2 .NET Core笔试题
1.说说在Linux系统部署ASP.NET Core项目的步骤. 2.说说热重载是什么. 3.如何理解鉴权和授权两个词 4.说说.NET7包含了几大方向的开发? 5.如何理解云原生? 6.ASP.NE ...
- nodejs实现保存文件到本地或者服务器
nodejs如何将前端传递的文件进行保存在本地或者服务器 一.nodejs获取前端传递的文件file有三种,这里我们推荐使用koa-body 1 // 安装依赖 koa-body 2 npm inst ...
- java环境变量配置-最新版
安装 百度"java下载"进入官网下载最新版,闭着眼睛安装: 配置jre 因java11以上不自带jre,需要我们自己配置,配置如下: # 终端进入jdk所在的目录后执行 bin\ ...
- 双端队列xLIS问题
题目大意 有 \(N\) 个数 \(A_i\) ,他准备将他们依次插入一个双端队列(每次可以在头或尾插入一个元素),最后将 整个队列从尾到头看成一个序列,求出最长上升子序列的长度 .他想知道 , \( ...
- Win下依据端口排查步骤
Win下依据端口排查步骤 目录 Win下依据端口排查步骤 1 排查步骤 2 参考 今天突然发现自己电脑出现7680端口的内网连接,决定看看这个端口是做什么用的 1 排查步骤 确认7680端口连接情况与 ...
- STM32L431 移植 LiteOS 时 _ebss _Min_Heap_Size _Min_Stack_Size 未找到或未定义
将 LiteOS 移植完成之后,编译报如下错误: 环境 版本 Keil V5.37.0.0 Windows11 2022/12/22 ARM::CMSIS 5.9(2022-05-22) 开发板 ST ...
- 06#Web 实战:可滑动的标签页
实现效果图 本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程.我的 Gitee 和 GitHub 地址.注意哦:这个只是 PC 上的标签页,手机端的没用,因 ...