tensorflow python3和c c++的混合编程 SWIG demo

环境

[email protected]:~$ swig -version

SWIG Version 3.0.12


[email protected]:~$ lsb_release -a


No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:    bionic

[email protected]:~$ python3 --version


Python 3.6.7

tensorflow python3和c c++的混合编程 SWIG demo

https://python3-cookbook.readthedocs.io/zh_CN/latest/c15/p09_wrap_c_code_with_swig.html

http://www.swig.org/tutorial.html

[email protected]:~/swigDemo/swigsrc$ swig -python -py3 sample.i
 

tensorflow python3和c c++的混合编程 SWIG demo

>>> 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(&ltime);
     return ctime(&ltime);
 }
 
 

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();