Python调用C或者C++

基本说明

文件类型介绍
.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模块	
posted @ 2023-10-23 20:07  辰令  阅读(71)  评论(0编辑  收藏  举报