2020-11-04

window 和 linux 系统调用 c++函数生成的可执行文件。

由于网络学习的python代码中某一步骤处理速度太慢,所以用可执行文件代替,加快训练运行速度,记录如下:

#######################################################################################################################################################################################

window系统上使用VS编译c++函数,生成python可执行文件,并调用。

使用vs建立c++工程,配置,编写函数规范

参考网站: 

https://blog.youkuaiyun.com/qq_29176963/article/details/103899333

https://blog.youkuaiyun.com/maosijunzi/article/details/79354806

https://blog.youkuaiyun.com/GitChat/article/details/78537098?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromBaidu-5.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromBaidu-5.nonecas

建立c++空项目,配置如下。

注意点一:c++代码中有#include <Python.h>  ,此  python包含目录和库目录及依赖项需要是最终要运行的python代码中的python环境库。我的python项目是Anaconda中的安装的python库,所以有下面的相关配置。

 

 

 

 

 

 

注意点二: python代码中传入的参数是list类型,需要转换为c++函数中需要的类型;同样c++函数运行后输出也要转换为list类型传回给python代码环境。因此需要在c++代码中写转换函数以进行转换。

c++函数主要几个部分包括:

(1)初始化函数,此部分是python调用执行的开始。

注意project_name就是你的项目名称,注意修改。PCmodule是下面的定义的模块。

(2)模块定义部分

“fs”名字可以随意,test_methods是这各模块中的方法列表名称,可以包含多个方法,见下面。

(3): 方法定义:

这里方法里面只有一个方法模块,可以定义多个方法模块。如下面定义了两个方法GGgroup,GGgroup1:

(4),方法实现函数:ffFs方法

方法实现函数里面主要有下面几个部分:

(a),接收调用传入的参数:整数等常见类型直接可以接收,其他的类型则要通过Pyobject定义类型接收。顺序按照传入参数的顺序,"oi"分别指类型对象和整数。

 

(b), python传入参数类型转换为c++函数可辨识类型。这里以下面的函数为例:

在上面方法实现函数中对其进行调用:

 

(c), c++功能函数部分: 即你要用c++代码实现的功能,因为现在输入的参数已经知道且转换完毕了。

 

将其在方法实现函数中调用。

 

(d), 将c++功能函数返回值转换为python类型并返回,以下函数为例。

 

在方法实现函数中的调用:

 

如果方法列表中包含多个方法,则需要定义多个方法函数。

 

注意点三:内存泄漏问题。c++代码要保证不存在内存泄漏问题,如果每次调用这个执行函数文件,都存在内存的泄露,内存会不断增加消耗。

如下图中的注意一步,必须要释放新建的PyList_New, 若是返回值就不需要释放。:

参考网站:

https://blog.youkuaiyun.com/daineng/article/details/3786581?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight

https://www.cnblogs.com/OCaml/archive/2012/06/29/2568920.html

https://ask.youkuaiyun.com/questions/362191

主要注意代码中是否有需要释放的变量。

编译生成工程,生成DLL文件,修改为.pyd文件,将其放入对应python环境中Lib\site-packages文件夹下,然后就可以在python代码中import使用了。

######################################################################################################################################################################################################################################

linux系统上使用g++编译c++函数,生成python可执行文件并调用

参考网站:

https://blog.youkuaiyun.com/sinat_37532065/article/details/86537247

 

linux系统上调用的是.so文件,因此需要使用g++将.cpp文件编译成.so文件,然后放入对应python环境中lib/python3.7/文件夹中,在python代码import调用。

注意点:编译命令需要带有优化参数,否则代码运行非常慢。上面的vs编译中有优化参数。

 

注意点1: 代码修改

在上述代码的基础上,加上模块初始化函数声明和主函数调用部分。

 

 

注意点2,代码编译优化选项和参数路径

到cpp文件所在文件夹执行编译命令。

代码如下:这里要选择正确的python路径,参照上面python路径,linux和windows上的包含路径有所不同。即包含Python.h文件的路径。

可以在文件中设置,也可以直接在命令行内指定,包含路径设置,库路径设置等参考网站:

https://blog.youkuaiyun.com/arackethis/article/details/43342655

优化参数设置:

这里在命令中加入 -O2选项即可。参考网站:

https://blog.youkuaiyun.com/hit_090420216/article/details/44900215

https://blog.youkuaiyun.com/weixin_38145317/article/details/105241512

 

### 选择适合的 CentOS 7 ISO 镜像版本 在 CentOS 7 中,ISO 镜像文件主要分为以下几种类型:DVD 版、Everything 版和 Minimal 版。每种版本都有其特定的用途和特点,用户应根据实际需求选择最适合的版本。 #### DVD 版 DVD 版是一个标准安装盘,包含大量常用的软件包,适用于大多数用户的安装需求。它的体积大约为 4GB 左右[^2],能够在安装过程中提供足够的软件选项,而无需通过网络下载额外的组件。如果用户的系统需要运行常见的服务器应用程序(如 Web 服务器、数据库服务器等),DVD 版通常是一个合适的选择。 #### Everything 版 Everything 版包含了 CentOS 的所有软件组件,因此其体积较大,通常达到 10GB 左右[^2]。这种版本适合需要全面软件包支持的用户,例如开发人员或需要频繁安装各种工具和技术预览的环境。由于其包含的内容非常丰富,用户可以避免在后续使用中频繁地从网络获取额外的软件包。然而,对于磁盘空间有限或不需要这么多功能的用户来说,Everything 版可能显得过于庞大。 #### Minimal 版 Minimal 版是一个精简版本,仅包含系统运行所必需的基本软件包,体积约为 600MB[^2]。它非常适合资源受限的环境,例如嵌入式系统或对磁盘空间要求严格的虚拟机。此外,Minimal 版也常用于构建自定义的服务器环境,用户可以根据需要手动安装额外的软件包。如果用户对系统配置有较高的控制需求,并且希望减少不必要的软件占用,Minimal 版是一个理想的选择。 #### 推荐选择 - 如果用户需要一个包含常用软件的全面安装体验,建议选择 **DVD 版**[^2]。 - 如果用户需要完整的软件包集合,并且磁盘空间充足,建议选择 **Everything 版**。 - 如果用户处于资源受限的环境,或者希望从最小化安装开始逐步添加所需软件,建议选择 **Minimal 版**。 #### 示例:下载和验证 CentOS 7 ISO 镜像 以下是一个示例命令,用于从网易镜像站点下载 CentOS 7.5 的 DVD 版 ISO 文件,并验证其完整性。 ```bash # 下载 CentOS 7.5 DVD 版 ISO 文件 wget http://mirrors.163.com/centos/7.5.1804/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso # 下载对应的校验文件 wget http://mirrors.163.com/centos/7.5.1804/isos/x86_64/SHA256SUM # 校验 ISO 文件的完整性 sha256sum -c SHA256SUM ``` 通过上述命令,用户可以确保下载的 ISO 文件是完整且未被篡改的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值