因为我自己比较喜欢Code::Blocks,因此,下面的介绍,我是用CB来弄的。使用的是MinGW的gcc编译器。
虽然可以使用命令行来编译,不过我实在是不喜欢在windows cmd下用命令。。。。如果是linux,那就华丽地命令吧!
ok!进入正题!
咋们先写一个简单的函数,就是我们想要作为模块给Python也能使用的。
//demo.c
int simpleAdd(int x,int y)
{
return x+y;
}
上面做了一个简单的两数相加的函数,现在要把这个函数变成Python模块。
接下来就是要写一个符合swig语法的信息文件,这个文件将要告诉swig如何到处函数,后缀是.i
//demo.i
%module demo
%{
extern simpleAdd(int x,int y);
%}
简单吧!%module后面是模块的名称。之后在%{...%}之间的是需要到处的函数或者类等等,添加extern说明需要导出函数。如果是c++,这里可以添加用%开头的 #include "....h"文件
在%{...%}之后跟的是函数申明(类的成员函数)。这里我只有一个函数,不是类里的,因此就不需要了。
然后我们需要使用swig来将我们需要的demo.c文件转换成demo_wrap.c接口文件。
命令如下
swig -python demo.c
swig -后跟的是需要转换的目标模块语言。
转换之后我们得到demo_wrap.c和demo.py文件,demo_wrap.c这个文件就是接口文件,里面将c/c++变量转换成了Python类型的。
demo.py文件就是模块调用的Python脚本。
接下来,打开Code::blocks(或者其他你喜欢的IDE)。新建一个空dll(动态链接库)项目,将之前我们编写的demo.c和得到的demo_wrap.c文件都加入到项目中。
设置项目属性,添加进Python的include文件夹目录和lib库目录。
设置输出文件,修改名字为_demo.pyd(必须是_开头,因为这是swig所要求的)
然后编译,我们就得到了_demo.pyd文件。将这个文件和之前得到的demo.py文件放在一起。
让我们写一个简单的Python脚本尝试下是否ok了。
#simple.py
import demo
res = demo.simpleAdd(3,4)
print res
运行这个脚本。得到结果:
7
ok!至此,扩展模块编辑结束,简单吧!
其实只要仔细了解.i信息文件的结构和规范,制作扩展模块就相当的方便啦!
用Python开发软件真的是相当快速。不过因为也是一种解释性语言,效率方面不可避免差一点点。因此要是开发比较大的软件,一般都是用Python开发GUI和其他接口连接等胶水程序,重要部分用c++重写,效率上就基本没有什么问题了。
虽然可以使用命令行来编译,不过我实在是不喜欢在windows cmd下用命令。。。。如果是linux,那就华丽地命令吧!
ok!进入正题!
咋们先写一个简单的函数,就是我们想要作为模块给Python也能使用的。
//demo.c
int simpleAdd(int x,int y)
{
return x+y;
}
上面做了一个简单的两数相加的函数,现在要把这个函数变成Python模块。
接下来就是要写一个符合swig语法的信息文件,这个文件将要告诉swig如何到处函数,后缀是.i
//demo.i
%module demo
%{
extern simpleAdd(int x,int y);
%}
简单吧!%module后面是模块的名称。之后在%{...%}之间的是需要到处的函数或者类等等,添加extern说明需要导出函数。如果是c++,这里可以添加用%开头的 #include "....h"文件
在%{...%}之后跟的是函数申明(类的成员函数)。这里我只有一个函数,不是类里的,因此就不需要了。
然后我们需要使用swig来将我们需要的demo.c文件转换成demo_wrap.c接口文件。
命令如下
swig -python demo.c
swig -后跟的是需要转换的目标模块语言。
转换之后我们得到demo_wrap.c和demo.py文件,demo_wrap.c这个文件就是接口文件,里面将c/c++变量转换成了Python类型的。
demo.py文件就是模块调用的Python脚本。
接下来,打开Code::blocks(或者其他你喜欢的IDE)。新建一个空dll(动态链接库)项目,将之前我们编写的demo.c和得到的demo_wrap.c文件都加入到项目中。
设置项目属性,添加进Python的include文件夹目录和lib库目录。
设置输出文件,修改名字为_demo.pyd(必须是_开头,因为这是swig所要求的)
然后编译,我们就得到了_demo.pyd文件。将这个文件和之前得到的demo.py文件放在一起。
让我们写一个简单的Python脚本尝试下是否ok了。
#simple.py
import demo
res = demo.simpleAdd(3,4)
print res
运行这个脚本。得到结果:
7
ok!至此,扩展模块编辑结束,简单吧!
其实只要仔细了解.i信息文件的结构和规范,制作扩展模块就相当的方便啦!
用Python开发软件真的是相当快速。不过因为也是一种解释性语言,效率方面不可避免差一点点。因此要是开发比较大的软件,一般都是用Python开发GUI和其他接口连接等胶水程序,重要部分用c++重写,效率上就基本没有什么问题了。