python swig封装c/c++成Python库

1、c封装
//add.h

ifndef ADD_H

define ADD_H

int add(int,int);

endif

//------------------------------------------------------------------------

//add.c

include "add.h"

int add(int a,int b)
{
return a+b;
}
swig需要一个输入文件(add.i)。
/* add.i /
%module add /
模块名*/

%{

include "add.h"

%}

int add(int,int); /add.h中的内容/
2、

Makefile

_add.so : add.c add.h add_wrap.c
gcc -shared -fPIC -o _add.so add.c add_wrap.c
add_wrap.c : add.i
swig -python -py3 add.i
clean :
rm _add.so add_wrap.c add.py
3、自己创建add.c、add.h、Makefile和add.i,编译生成add.py和_add.so。swig生成add.py和add_wrap.c,gcc将add.c和add_wrap.c编译成_add.so。在add_wrap.c搜索手动封装c函数的add.c文件中的相关结构便知其实质。
4、封装C++
//vector.hpp

ifndef VECTOR_HPP

define VECTOR_HPP

class Vector{
public:
Vector(int,int);
double abs();
void display();
private:
int x;
int y;
};

endif

5、
//vector.cpp

include "vector.hpp"

include

include

using namespace std;

Vector::Vector(int a,int b){ x=a; y=b; }
void Vector::display(){ cout << "(" << x << ',' << y << ')' << endl; }
double Vector::abs(){ return sqrt(xx+yy); }
6、
/* vector.i */
%module vector
%{

include "vector.hpp"

%}

class Vector{
public:
Vector(int,int);
double abs();
void display();
private:
int x;
int y;
};
6、Makefile

Makefile

_vector.so : vector.cpp vector.hpp vector_wrap.cxx
g++ -shared -fPIC -I/usr/include/python3.4m -lpython3.4m -o _vector.so vector.cpp vector_wrap.cxx
vector_wrap.cxx : vector.i
swig -c++ -python -py3 vector.i
clean :
rm _vector.so vector_wrap.cxx vector.py
7、自己创建vector.cpp、vector.hpp、Makefile和vector.i,编译生成vector.py和_vector.so。

你可能感兴趣的:(python swig封装c/c++成Python库)