python3调用c语言_Python3与C/C++的相互调用

Python与C/C++可以相互调用。在这一章节里,我们会分别从Linux与Windows平台通过示例的方式介绍它们之间是如何调用的。

1. Linux下Python3与C/C++的相互调用

这里我们分成两个部分:Python3调用C/C++; C/C++调用Python3.

1.1 Linux下Python3调用C/C++

(1) Python3调用C动态链接库

Python3调用C库比较简单,不需要经过任何封装打包成so,再使用python的ctypes调用即可。我们分成如下步骤:

编写C语言源文件并打包生成动态链接库

Python3调用动态链接库

头文件:test.h

#ifndef __TEST_H_

#define __TEST_H_

int add(int a,int b);

#endif

源文件:test.c

#include "test.h"

int add(int a,int b)

{

return a + b;

}

编译成动态链接库:

[root@localhost python_c]# gcc -o libtest.so -shared -fPIC test.c

[root@localhost python_c]# ls

libtest.so test.c test.h

Python3调用动态链接库:

import ctypes

lib = ctypes.cdll.LoadLibrary("./libtest.so")

result = lib.add(2,4)

print(result)

执行程序:

[root@localhost python_c]# python3 ./python_c.py

6

(2) Python3调用C++动态链接库

Python不能直接调用C++函数,需要通过对应的包装,通过C函数的方式导出才能够被使用。

头文件:test.h

#ifndef __TEST_H_

#define __TEST_H_

class Algorithm{

public:

int add(int a,int b);

};

extern "C" int add(int a,int b);

#endif

源文件:test.cpp

#include

#include

#include "test.h"

int Algorithm::add(int a,int b)

{

printf("Algorithm::add-------\n");

return a + b;

}

int add(int a,int b)

{

Algorithm alg;

return alg.add(a,b);

}

编译成动态链接库:

[root@localhost python_cplusplus]# gcc -o libtest.so -shared -fPIC test.cpp

[root@localhost python_cplusplus]# ls

libtest.so python_cplusplus.py test.cpp test.h

Python3调用动态链接库:

import ctypes

lib = ctypes.cdll.LoadLibrary("./libtest.so")

result = lib.add(100,4)

print(result)

执行程序:

[root@localhost python_cplusplus]# python3 ./python_cplusplus.py

Algorithm::add-------

104

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值