环境
a@ubuntu:~$ swig -version
SWIG Version 3.0.12
a@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.2 LTS
Release: 18.04
Codename: bionic
a@ubuntu:~$ python3 --version
Python 3.6.7
https://python3-cookbook.readthedocs.io/zh_CN/latest/c15/p09_wrap_c_code_with_swig.html
http://www.swig.org/tutorial.html
a@ubuntu:~/swigDemo/swigsrc$ swig -python -py3 sample.i
>>> import example
>>> example.fact(3)
6
>>> example.fact(4)
24
>>> example.my_mod(4,3)
1
>>> example.get_time()
'Mon Mar 11 21:11:14 2019\n'
>>>
/* File : 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(<ime); return ctime(<ime); }
Interface file
Now, in order to add these files to your favorite language, you need to write an "interface file" which is the input to SWIG. An interface file for these C functions might look like this :
/* example.i */ %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();