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

2022-05-14 14:44:23 浏览数 (1)

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。

0 人点赞