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 <iostream>
include <cmath>
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。