Swig在windows下的使用流程

 

本文以将C语言函数接口封装为Python下的接口为例进行介绍。系统环境winXP 32。

一、软件安装

(1)安装Python

       下载地址:https://www.python.org/getit/,版本2.7.9;点击python-2.7.9.msi进行安装,安装在C:\Python27目录下;设置环境变量:我的电脑--控制面板--系统--高级--环境变量--在用户变量下找到PATH--编辑--在变量值中填入C:\Python27。

(2)安装swigwin

       下载地址:http://www.swig.org/download.html,版本3.0.12;解压在C:\swigwin-3.0.12目录下,并设置环境变量:……在用户变量下找到PATH--编辑--在变量值中填入C:\swigwin-3.0.12。

二、简单举例

       让我们以一个简单举例入手,在Windows下将C函数制作成DLL库,并将其封装成Python的一个Module,然后再Python中import这个Module,然后再Python中调用这个Module中的函数。

(1)新建VS2010工程

       打开VS2010,新建Win32 Console Application,在Application Settings中选择DLL以及空项目。完成后将工程配置改为Release,如若不改后面编译会出错(因为我下载的Python是Release版的,而非Debug版)。

(2)在工程中新建example.c(内容为swigwin-3.0.12\Examples\python\simple\example.c)

(3)在工程中新建 example.i(内容为swigwin-3.0.12\Examples\python\simple\example.i)

(4)修改example.i的属性

       选中example.i--右键--属性--常规--选择自定义生成工具;

       选中example.i--右键--属性--自定义生成工具--常规:

命令行:

echo In order to function correctly, please ensure the following environment variables are correctly set:

echo PYTHON_INCLUDE: %PYTHON_INCLUDE%

echo PYTHON_LIB: %PYTHON_LIB%

echo on

C:\swigwin-3.0.12\swig.exe  -python“%(FullPath)”

输出:

$(InputName)_wrap.c

(5)编译example.i

       选中example.i--右键--编译,将产生example.py和example_wrap.c,将example_wrap.c加入工程。

       在Python中使用import example就会去加载example.py文件。而example.py文件的第一句就是import _example,_example是什么呢,就是我们要制作的一个动态库,即我们要把Swig生成的example_wrap.c和自己编写的example.c放在一起制作一个名为_example.pyd的动态库来。

       注意:步骤(4)(5)也可以不在VS2010下进行,改为在DOS命令行进行,即步骤(4)(5)可以被如下操作代替:

在开始--运行--输入cmd进入DOS命令行,

切换到example.c所在的目录命令cd C:\ swigwin-3.0.12\Examples\python\simple\example.c,

然后编译example.i,命令swig -python example.i。

(6)设置Python库的环境变量

       我的电脑--控制面板--系统--高级--环境变量--新建,变量名和值分别为如下两组:

       PYTHON_INCLUDE: C:\python27\include
       PYTHON_LIB: C:\python27\libs\python27.lib

       因为example_wrap.c文件中会用到python.h (包含)和python21.lib(链接)。

(7)修改VS2010工程的配置属性

       选择项目--属性即可打开属性页。

       C/C++--常规--附加包含目录:$( PYTHON_INCLUDE)

       链接器--常规--输出文件:_example.pyd

       连接器--输入--附加依赖项:$( PYTHON_LIB)

(8)编译整个工程。

       将生成的example.py和_example.pyd拷贝出来即可在Python中使用。

(9)动态库在Python中的使用

       将生成的example.py和_example.pyd拷贝到D:\test目录下。

打开DOS命令行,执行如下操作:

切换到D盘

>D:

>cd D:\test

进入python交互命令行

>python

>>>import example

>>>x = 42
>>>y = 105
>>>g = example.gcd(x, y)
>>>print "The gcd of %d and %d is %d" % (x, y, g)
The gcd of 42 and 105 is 21
>>>print "Foo = ", example.cvar.Foo
Foo = 3.0
>>>example.cvar.Foo = 3.1415926
>>>print "Foo = ", example.cvar.Foo
Foo = 3.1415926

 

参考:

(1)SWIG的使用教程

https://wenku.baidu.com/view/8f4bab73001ca300a6c30c22590102020740f2c4.html

(2)用C编写Python扩展找不到Python27_d.lib

http://blog.sina.com.cn/s/blog_75e9551f0101aajd.html

https://blog.csdn.net/junparadox/article/details/52704287

(3)windows下使用swig

https://blog.csdn.net/A8572785/article/details/10427521

(4)如何实现 C/C++ 与 Python 的通信?

https://www.zhihu.com/question/23003213

(5)在Win7环境下,利用SWIG实现Python调用C的方法

https://blog.csdn.net/cuiqiang1990csdn/article/details/45310821

(6)利用 SWIG 对 C++ 库进行 Python 包装

https://segmentfault.com/a/1190000013219667?utm_source=tag-newest

(7)swig入门

https://blog.csdn.net/zhangzq86/article/details/78836309

(8)PYTHON调用C语言函数

https://coolshell.cn/articles/671.html

https://www.cnblogs.com/zhsuiy/p/4798642.html

(9)c#利用SWIG调用c++dll学习总结

https://blog.csdn.net/liu14lang/article/details/78882539

你可能感兴趣的:(python)