Python扩展C/C++库的方法(C转换为Python)
参考网址:https://www.shanlily.cn/archives/330

一、简介
Python是个非常流行的解释型脚本语言。而C是一个非常流行的编译语言。由于其编译的性质,导致C一般比Python要快,但是它是更底层的。相对的,Python编程更加快速和简单。故而将C库作为Python库的扩展极为必要,使得Python既融合了自身的优点,又融合了C语言的优点,正是因为这些性质使得Python越来越流行。
二、通过swing扩展C库
(1) 安装swig
命令: sudo apt-get install swig
(2) 准备好要转换的C源文件和C头文件, 可参考下面的代码:
新建头文件:Conver_Testswig.h,并添加如下内容:
dvoid Table99(int n); void Fabocci(void); int Max_value(int value1, int value2);
新建.c文件:Conver_Testswig.c,并添加如下内容:
#include <stdio.h>
#include "Conver_Testswig.h"
// 打印乘法表
void Table99(int n)
{
int i, j;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
printf("%d*%d=%-4d", i, j, i*j);
}
printf("\n");
}
}
// 打印斐波那契数列的前20个
void Fabocci(void)
{
long int f1, f2;
f1 = f2 = 1;
int i;
for(i = 1; i <= 20; i++)
{
printf("%12ld %12ld", f1, f2);
if(i % 2 == 0)
printf("\n");
f1 = f1 + f2;
f2 = f1 + f2;
}
}
// 返回两个数值中的最大那个。
int Max_value(int value1, int value2)
{
if(value1 > value2)
{
return value1;
}
return value2;
}
(3) 创建一个 .i 文件来配置swig。,文件为:Conver_Testswig.i ,并添加如下内容:
%module Conver_Testswig
%{
#define SWIG_FILE_WITH_INIT
#include "Conver_Testswig.h"
%}
void Table99(int n);
void Fabocci(void);
int Max_value(int value1, int value2);
简单介绍:
%module Conver_Testswig 用于配置swig后产生的文件名称 #define SWIG_FILE_WITH_INIT 规定这个C文件将会编译成Python模块 #include "Conver_Testswig.h" 包含头文件
(4) 配置swig。在含有Conver_Testswig.i文件的目录下执行如下命令:
swig -python Conver_Testswig.i
执行该命令会生成一个Conver_Testswig_wrap.c和Conver_Testswig.py文件则代表你配置成功了.
(5) 通过setup库进行编译。新建一个 setup.py 文件并添加内容:
① 编写setup.py文件, 请参考以下代码:
from distutils.core import setup, Extension MOD = '_Conver_Testswig' example_module = Extension(MOD, sources=['Conver_Testswig_wrap.c', 'Conver_Testswig.c'], ) setup(name=MOD,ext_modules = [example_module],)
注意: 请务必注意生成目标文件名称需要加”_”
② 通过setup.py文件进行编译
命令: python setup.py build
编译完成后, 可在/build/…/…找到相应库文件,如果是在linux系统下,一般生成的文件中含有.so库文件,将该文件拷贝到python的site-packages包管理目录下即可使用或者在build编译后再使用install命令将该.so文件生成在site-packages包管理目录下。此处我的python环境是新建的一个虚拟环境。
命令:python setup.py install
(6) 开始运行测试吧,在pycharm中测试。
打印乘法表:
打印斐波那斐契数列的前20个:
总结
代码知识SEO上一篇 : 详解Mybatis-plus中更新date类型数据遇到的坑
下一篇 : 关于Mybatis-Plus字段策略与数据库自动更新时间的一些问题
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!