基本说明
文件类型介绍
.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