首页 > 编程语言 >Python调用C或者C++

Python调用C或者C++

时间:2023-10-23 20:25:32浏览次数:26  
标签:调用 Python C++ dll 静态 ctypes

基本说明

文件类型介绍
.out是可执行文件,相当于win上的exe;
.o是编译中间目标文件,相当于win上的.obj;
.a是静态库,多个.o练链接得到,用于静态链接;
.so是共享库,用于动态链接,相当于win上.dll

可执行文件

file 查看文件类型
ldd命令查看某个可执行文件依赖了哪些动态链接库 ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量
ls  查看权限 
chmod chown 改变权限

调用方式

 Python 调用C++:
   使用 PyBind11 C++ 库生成 Python 模块,使用 PyBind11,我们可以更轻松地共享许多数据类型
   或者使用 cytpes Python 包访问编译的共享库,而使用 ctypes 是一种低级的 C 样式解决方案	

ctypes

ctypes 是 Python 的外部函数库。
它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数

Python如何调用C库

    C++的函数需要用extern描述才能被Python调用。将代码修改为如下形式的CPP文件  C++中的函数需要extern "C"来转成C语法编译
	   只需要加在需要被python调用的C++函数外面即可。其他不被调用的可以不用加。
      -shared 指定微共享库
      -fPIC 表明使用地址无关代码		
 ###示例:
     一、创建c dll库
	 a静态库 生成
       (1)创建静态库
       由.o文件创建静态库,静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,
	   扩展名为.a
	 
	 so共享库 生成
     (1)创建so
      由.o文件创建动态库文件,动态库文件名命名规范是在动态库名增加前缀lib,紧接着跟静态库名,
      文件扩展名为.so
	 
     二、使用python调用dll
         使用python调用dll
         from ctypes import *
         
         useDll = CDLL("./test.dll")
         result = useDll.add(1, 1)
         print(result)  
###for Windows   windll  cdll
###for Linux
   cdll.LoadLibrary("libc.so.6")   或者  libc = CDLL("libc.so.6") 

数据类型
  ctypes defines a number of primitive C compatible data types
     c_bool c_double

pybind

pybind11是一个轻量级的仅头文件库,主要用于创建现有C++代码的Python绑定
   pybind11依赖于python(2.7或3.5+)和C++标准库

Python中实现调用可执行文件-二进制文件的方法

使用Python自带的os模块
使用subprocess模块	

标签:调用,Python,C++,dll,静态,ctypes
From: https://www.cnblogs.com/ytwang/p/17783361.html

相关文章

  • Python学习1
    syntax blocks#statements->instruction1.literal90、"ONE"2.operator3.comment4.variablestoremodifyaccess5.functiondefadd(n):#statementreturnn6.keyword Writecodeinoneofthesethreecommonways:Directly(python.exe)Progr......
  • 力扣每日一题+python知识点回顾(四)
    力扣题目:统计无向图中无法互相到达点对数(题号:2316)给你一个整数n,表示一张无向图中有n个节点,编号为0到n-1。同时给你一个二维整数数组edges,其中edges[i]=[ai,bi]表示节点ai和bi之间有一条无向边。请你返回无法互相到达的不同点对数目。示例一:输入:n=3,edges=[[0,1],[0,2......
  • Python40days
    针对记录的SQL语句配置文件的介绍存储引擎的使用(存储的方式)数据类型***整型  浮点型  字符串 日期 枚举约束条件zerofill unsigned  notnu default  unique primarykey auto_increment———————————————————————————......
  • CentOS 7 安装 Python 3.10
    1.安装编译所需的依赖sudoyum-yupdatesudoyum-yinstallopenssl-devellibffi-develbzip2-develsudoyum-ygroupinstall"DevelopmentTools" 2.安装Python3.10必需的openssl>=1.1.1wgethttps://www.openssl.org/source/openssl-1.1.1q.tar.gz-......
  • Python网页应用开发神器fac 0.2.10版本新功能介绍
    fac项目地址:https://github.com/CNFeffery/feffery-antd-components欢迎star支持⭐大家好我是费老师,由我开源维护的Python网页通用组件库fac前不久更新至0.2.10新版本,使用下列命令可快速完成更新:pipinstallfeffery-antd-components-U-ihttps://mirrors.aliyun.com/p......
  • Effective C++: 改善程序与设计的55个具体做法pdf电子版下载
    EffectiveC++:改善程序与设计的55个具体做法pdf电子版下载作者: [美]ScottMeyers原作名: EffectiveC++:55SpecificWaystoImproveYourProgramsandDesigns出版年: 2011-1-1ISBN: 9787121123320连接提取码:og02关于这本书有个颇有名气的段子:C++程序员可以分为两类,读......
  • c++ int数组存储long long元素
    高往低存,可能造成数据截断。如longlong64位,int32位,高32位被丢弃。可以将int数组每两个元素分别存储低32位和高32位inta[4];//隐式转换*a=2;//目标格式是int,2默认值默认值默认值*(longlong*)a=2;//目标格式是......
  • Python拆分列中文和 字符
    importpandasaspddefextract_characters(file_path,sheet_name,column_name):#读取Excel文件df=pd.read_excel(file_path,sheet_name=sheet_name)#创建两个新的列df['中文']=''df['其他字符']=''#遍......
  • Mysql新增分区-Python版
    importdatetimeimportsysimportpandasaspdimportpymysqlimportsqlalchemy.engine.urlasengineUrlfromsqlalchemyimportcreate_engineDB_INFO={"host":"IP","port":3306,"username":"ro......
  • mysql 自定义函数的调用及赋值
    函数调用:select函数名(参数);函数返回值赋值:set变量名=(select函数名(参数));select函数名(参数)into变量名;示例:自定义函数内容 selecttest4(5)intoaa;setbb=(selecttest4(10));selectaa,bb; ......