3、编译模块并测试
  编译模块:
  python setup.py build
  会在build目录产生boostCallTest1.so文件,进入该目录,可如下使用:
  >>> import boostCallTest1
  >>> boostCallTest1.Max(1,3)
  3
  使用swig扩展python
  SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。
  SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。
  swig官网: http://www.swig.org/download.html
  可以通过yum直接安装:
  yum install swig
  1、编写程序代码
  文件名:swigCall.cpp
  内容如下:
  int Max(int i1,int i2)
  {
  return (i1>i2)?i1:i2;
  }
  2、编写接口文件
  文件名:swigCall.i
  内容如下:
  %module swigCall
  %{
  extern int Max(int i1,int i2);
  %}
  extern int Max(int i1,int i2);
  3、编写Makefile文件
  内容如下:
  all:
  make swigCall
  swigCall:
  swig -python -c++ swigCall.i
  g++ -c swigCall.cpp swigCall_wrap.cxx -I/usr/include/python2.6/ -fPIC
  g++ -shared swigCall.o swigCall_wrap.o -o _swigCall.so
  clean:
  rm -f swigCall_wrap.c*
  rm -f *.py*
  rm -f *.so
  rm -f *.o
  注意:swig命令中要使用-c++参数编译c++代码
  使用SIP扩展python
  SIP是从SWIG发展而来,专为Python调用C/C++模块使用的。 注意,这里的SIP和voip中的sip不是同一个东西,这里的sip是扩展python用的,voip中的sip是一个通信协议,不要搞混了。
  注意:
  需要安装python sip库;
  1、编写c++模块
  1.1 编写头文件
  文件名: sipCall.h 文件内容:
  class TestMode
  {
  public:
  int Max(int i1,int i2);
  };
  1.2 编写模块内容
  文件名:sipCall.cpp 文件内容:
  #include "sipCall.h"
  int TestMode::Max(int i1,int i2)
  {
  return (i1>i2)?i1:i2;
  }
  2、编写接口文件
  文件名:sipCall.sip 文件内容:
  %Module TestMode
  class TestMode {
  %TypeHeaderCode
  #include "sipCall.h"
  %End
  public:
  int Max(int i1,int i2);
  };
  3、生存静态库
  这里用脚本实现,文件名称:genlib.sh
  文件内容:
  #! /bin/bash
  g++ -c -fPIC sipCall.cpp
  ar -crs libsipCall.a sipCall.o
  4、编写configure文件
  该脚本用于生成Makefile,内容如下:
  #! /usr/bin/env python
  import os
  import sipconfig
  build_file = "sipCall.sbf"
  config = sipconfig.Configuration()
  cmd = " ".join([config.sip_bin, "-c", ".", "-b", build_file, "sipCall.sip"])
  os.system(cmd)
  makefile = sipconfig.SIPModuleMakefile(config, build_file)
  makefile.extra_libs = ["sipCall"]
  makefile.LIBDIR.append(".")
  makefile.generate()
  5、运行genlib.sh脚本生成lib文件;
  6、运行configure.py脚本生成Makefile;
  7、运行make生成模块文件(so文件);
  8、python测试如下:
  >>> import TestMode
  >>> dir(TestMode)
  ['TestMode', '__doc__', '__file__', '__name__', '__package__']
  >>> s = TestMode.TestMode()
  >>> s.Max(1,3)
  3