python 调用 C++ 函数

python 调用 C++ 函数

一、首先来看 python 调用 c 语言的部分,然后扩展到 c++

在 Linux 环境下操作,因为生成的动态链接库是在 Linux 中生成的。如果需要在 Windows 环境下使用,需要使用 Windows 环境下对应编译生成动态链接库的方法进行生成。

python 调用 C 语言程序步骤:

  1. 首先需要将编写好的 .c 文件编译为动态库文件(后缀名为 .so)

  2. gcc 源文件.c -shared -fPIC -o 目标文件.so (-shared:生成动态链接库 -fPIC:生成的代码与位置无关)

  3. 在 python 程序中导入 ctypes 模块

  4. 在 python 中引入 c 动态库,并定义一个变量来接收动态库:a=cdll.LoadLibrary(“动态库文件路径”)

  5. python 调用其中的函数:a.函数名()

示例程序:

// test.c 文件
void foo2(int a, int b)
{
    cout<<"a="<<a<<",b="<<b<<endl;
} 
# test.py 文件(如果没有 ctypes,使用 pip install ctypes 安装)
import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("./test.so")
lib.foo2(3, 4)
# 生成动态链接库(linux 的终端中,可以使用 win10 的 Linux 子系统)
gcc test.c -shared -fPIC -o test.so
# 在 Liunx 的终端中运行示例 python 程序
python3 test.py

二、python 调用 C++ 函数

在 Linux 环境下操作,因为生成的动态链接库是在 Linux 中生成的。如果需要在 Windows 环境下使用,需要使用 Windows 环境下对应编译生成动态链接库的方法进行生成。

python 调用 C++ 语言程序步骤:

  1. 首先需要将编写好的 .cpp 文件编译为动态库文件(后缀名为 .so)【注意:需要对程序中的函数进行封装

  2. gcc 源文件.cpp -shared -fPIC -o 目标文件.so (-shared:生成动态链接库 -fPIC:生成的代码与位置无关)

  3. 在 python 程序中导入 ctypes 模块

  4. 在 python 中引入 c 动态库,并定义一个变量来接收动态库:a=cdll.LoadLibrary(“动态库文件路径”)

  5. python 调用其中的函数:a.函数名()【注意:此处调用的函数名调用的是封装后的函数名

示例程序:

// .cpp 文件
#include <iostream>
using namespace std;

void foo2(int a, int b)
{
	printf("a=%d, b=%d\n", a, b);
} 
 
 /* 
 	编译C++,一定要加 extern "C",注意C为大写,小写无法识别
 	此处对C++程序中的程序进行封装,一般在函数名前加c作为被python调用的函数名
 */
 extern "C"
 {
 	void cfoo2(int a, int b)
 	{
 		foo2(a,b);
	}
} 
# test_c++.py 文件(如果没有 ctypes,使用 pip install ctypes 安装)
import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("./test.so")
lib.cfoo2(3, 4)							# 此处调用的是封装后的函数名
# 生成动态链接库(linux 的终端中,可以使用 win10 的 Linux 子系统)
g++ test.cpp -shared -fPIC -o test.so
# 在 Liunx 的终端中运行示例 python 程序
python3 test_c++.py
  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值