swig的使用

swig的使用

1.介绍

SWIG是一个能将C或者C++编写的程序与其它各种高级语言如Perl, Python, Ruby, 和 Tcl进行联接的开发工具。其原理是从C/C++头文件中找到申明并利用他们生成脚本语言访问C/C++代码所必须的封装代码。SWIG具有高度可自定义的特点,它能帮助你生成适合你的应用程序的封装包。

2.使用

我们以Ubuntu为例子,用Python作为目的语言,Python调用C。

  1. 安装swig

    1
    apt-get install swig
  2. 安装python-dev

    1
    apt-get install python-dev
这是Python的开发包,包含库文件,和头文件,头文件一般在

/usr/include/python2.x

  1. 编写test.c文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #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);
    }
  2. 编写配置文件test.i

    配置文件其实就是一个接口文件

1
2
3
4
5
6
7
8
9
10
11
12
13
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}

extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
  1. 构建Python模块
1
2
3
4
swig -python test.i
gcc -c test.c test_wrap.c \
-I/usr/include/python2.7
ld -shared test.o test_wrap.o -o _test.so

如果在ld命令中出现了relocation R_X86_64_32 against xxx 错误,请在
gcc中加入-fPIC 然后再ld。

swig地址