欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python扩展C/C++库的方法(C转换为Python)

程序员文章站 2022-01-07 10:38:31
参考网址:https://www.shanlily.cn/archives/330一、简介python是个非常流行的解释型脚本语言。而c是一个非常流行的编译语言。由于其编译的性质,导致c一般比pyth...

参考网址: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库文件,将该文件拷贝到pythonsite-packages包管理目录下即可使用或者在build编译后再使用install命令将该.so文件生成在site-packages包管理目录下。此处我的python环境是新建的一个虚拟环境。

命令:python setup.py install

Python扩展C/C++库的方法(C转换为Python)
Python扩展C/C++库的方法(C转换为Python)

(6) 开始运行测试吧,在pycharm中测试。

打印乘法表:

Python扩展C/C++库的方法(C转换为Python)

打印斐波那斐契数列的前20个:

Python扩展C/C++库的方法(C转换为Python)

总结

到此这篇关于python扩展c/c++库的方法(c转换为python)的文章就介绍到这了,更多相关python扩展c/c++库内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: Python 扩展 C++