利用SWIG实现python调用C

利用SWIG实现python调用C

系统版本:Ubuntu16.04

  • 安装包

安装build-essential,安装了该软件包,编译c/c++所需要的软件包也都会被安装。

sudo apt-get install build-essential

安装python3-dev

sudo apt install swig python3-dev
  • 安装SWIG

sudo apt install swig
  • 设置PATH环境变量

export SWIG_PATH=/usr/share/swig3.0

export PATH=$PATH:$SWIG_PATH

设置完可以后查看环境变量是否安装好

echo $PATH
  • 代码样例

    五个文件example.c test.py example.h example.i setup.py

example.c

#include <time.h> 

double My_variable = 3.0; 

int fact(int n) 

{ 

if (n <= 1) return 1;  

else return n*fact(n-1); 

}

 int my_mod(int x, int y) 

{

  return (x%y);

 } 

char get_time()

 {  

time_t ltime;  time(&ltime);  return ctime(&ltime); 

}

test.py

import example 

print('My_varaiable: %s' % example.cvar.My_variable) 

print('fact(5): %s' % example.fact(5)) 

print('my_mod(7,3): %s' % example.my_mod(7,3)) 

print('get_time(): %s' % example.get_time())

example.h

#ifndef EXAMPLE_H 

#define EXAMPLE_H 



extern double My_variable; 

extern int fact(int n); 

extern int my_mod(int x, int y); 

extern char *get_time(); 



#endif

example.i

%module example



 %{ 

#include "example.h" 

%} 



extern double My_variable;

extern int fact(int n); 

extern int my_mod(int x, int y); 

extern char *get_time();

setup.py

#!/usr/bin/env python

"""
setup.py file for SWIG example
"""

from distutils.core import setup, Extension

example_module = Extension('_example',
                           sources=['example_wrap.c', 'example.c'],
                           )

setup (name = 'example',
       version = '0.1',
       author      = "SWIG Docs",
       description = """Simple swig example from docs""",
       ext_modules = [example_module],
       py_modules = ["example"],
       )


手动编译动态模块

编译前,需要把example.i文件转换成example_wrap.c和example.py两个文件。

命令行输入:

swig -python example.i

静态链接(需要预先编辑好setup.py)在某些机器上的动态加载支持受到限制,所以有时是必要的

python setup.py build_ext --inplace

测试 命令行输入

python test.py 

参考网址:

http://www.swig.org/Doc3.0/Python.html#Python_nn9

https://note.qidong.name/2018/01/hello-swig-example/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值