swig-python初试

swig不做介绍,python更不做介绍,自己去网上搜吧

linxu下安装swig需要的源码包在这里下   http://sourceforge.net/

笔者下到的:

wget "http://sourceforge.net/settings/mirror_choices?projectname=pcre&filename=pcre/8.12/pcre-8.12.zip" -O pcre-8.12.zip

wget http://sourceforge.net/projects/swig/files/swigwin/swigwin-2.0.4/swigwin-2.0.4.zip -O swigwin-2.0.4.zip

安装步骤

1.unzip这哥俩

2.先装pcre,进入pcre-8.12目录 ./configure ./make ./make install

3.再装swig,进入swigwin-2.0.4目录 ./configure ./make ./make install

4.小试一下,进入 swigwin-2.0.4/Examples/python/simple,make生成example.py _example.so

这里做必要的解释:

simple目录下有Makefile  example.c【C源码】 example.i【Interface定义】

------------------------------------------------源码例子-----------------------------------------------

-------------------example.c-------------------

/* File : example.c */

/* A global variable */
double Foo = 3.0;

/* Compute the greatest common divisor of positive integers */
int gcd(int x, int y) {
  int g;
  g = y;
  while (x > 0) {
    g = x;
    x = y % x;
    y = g;
  }
  return g;
}

-------------------example.i-------------------

/* File : example.i */
%module example

%inline %{
extern int    gcd(int x, int y);
extern double Foo;
%}

5.使用范例,make之,生成_example.so:

>>> import example
>>> example.gcd(13,10)
1
>>> example.gcd(3,12)
3
-------------------
----------------------------常用方法[轻松定义.i文件]--------------------------------------

------example.h------

#include <iostream>

using namespace std;

enum DAY { SUN, MON, TUE, WEN, THR, FRI, STU};

class Example{

    public:

        void say_hello();

        DAY get_cur_day();

};

------example.cpp------

#include "example.h"

#include "stdio.h"

void Example::say_hello(){ cout<<"hello"<<endl;}

DAY Example::get_cur_day(){return SUN;}

------example.i------

%module example

%{

#include "example.h"

%}

%include "example.h"

------setup.py------

#! /data6/peterguo/sea/tool/python/bin/python

from distutils.core import setup, Extension

example_module = Extension('_example', sources=['example.cpp', 'example_wrap.cxx',],)

setup(name="example", version="0.1", author="[email protected]", ext_modules = [example_module],py_modules = ["example"],)


生成python代码

swig -c\+\+ -python example.i ---->> example.py example_wrap.cxx


调用gcc进行编译

python ./setup.py build_ext --inplace ---->> _example.so ./build子目录

有了example.py和_example.so就可以使用这个类了。

参考:http://techblog.99fang.com/?p=17 www.swig.org/papers/PyTutorial98/PyTutorial98.pdf


你可能感兴趣的:(swig-python初试)