首页 > 编程知识 正文

swim的用法总结,swich 使用说明

时间:2023-05-03 13:52:36 阅读:259775 作者:135

近来因为工作需要需要在需要在python中调用c/c++代码的方式,网上搜索了下有许多方法,结合网上资料自己总结了下。

如下直接说适用方法。

1.适用swig进行该方法的处理。方法步骤:

a,下载swig源码包

    http://www.swig.org/survey.html

b,解压swig安装包,解压并进行安装。

       tar   -xvf   swig-3.0.12.tar.gz

       ./configure  --prefix=/usr/localswig(此处指定安装目录,不指定默认直接默认系统路径)

        (如果执行这不成功,缺少prce错误,说明缺少对应的文件,需要安装对应库,

             个人使用的是乌班图,安装法:apt-get install pcre-dev,或者下载源码包进行安装即可

         )

        make  && make install

      

       至此,swig安装完成。

2,使用举例

     python中调用c/c++代码使用方法。

    a, c++代码:

     //test.h

    int add(int a,int b);

   int  sub(int a,int b);

    //test.cpp

    int add(){   return a+ b;}   int sub(int a,int b){ return a - b;}

   编辑test.i文件

使用如下的方法编写.i文件(***********)

//%module 后面的名字是被封装的模块名称。封装口,python通过这个名称加载程序
//%{  %}之间所添加的内容,一般包含此文件需要的一些函数声明和头文件。

//最后一部分,声明了要封装的函数和变量,直接使用%include 文件模块头文件直接包含即可

  b,  //file test.i

    %module  test

    %{

      #define SWIG_WITH_INIT

      #include "test.h"

   %}

   %include "test.h  "

  c.执行命令编辑.i文件

       swig    -python    -c++    test.i

      此时会生成对应的文件:  模块名_warp.cxx

     利用python提供的自动化编译模块进行编译。编写一个编译文件setup.py

     内容如下:(仅供参考,具体详细了解python自动化编译动态链接库文档)

   

#生成一个扩展模块
test_module = Extension('_test', #模块名称,必须要有下划线
                        sources=['test_wrap.cxx',  #封装后的接口cxx文件
                                'test.cpp'],
                      )

setup(name = 'test',    #打包后的名称
        version = '0.1',
        author = 'SWIG Docs',
        description = 'Simple swig pht from docs',
        ext_modules = [test_module], #与上面的扩展模块名称一致
        py_modules = ['test'], #需要打包的模块列表
    )

利用python的执行setup.py文件

 python  setup.py  build  编译生成对应库,可供python直接调用的模块

实现过程如下所示:test模块为通过编译c++代码生成test模块,前面已经介绍c++代码示例:

>>> import test
>>> test.add(1,2)
3
>>> test.sub(4,2)
2
>>>

    

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。