一种是Python文档的推荐方案,采用C API扩展写法:
在D:建一个add.c文件,输入
然后在D:盘建立setup.py
将cmd切换到D:
输入setup.py build --compiler=mingw32 -verbose
这里我选择了mingw32,否则在我的机器上它会用msvc,而这会有一些小错误
运行成功后会在(当前目录的)D:/build/lib.win32-2.6下生成add.pyd。
下面就在Python中导入
>>> import sys
>>> sys.path.append("D:/build/lib.win32-2.6")
>>> import add
>>> add.add(3,2)
5
Bingo!
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
以上是用C API的扩展方式,它的写法比较麻烦。以下用ctypes直接导入dll模块。
如果是在Windows下面:
首先在D:建立文件spam.c
我用cl来编译它,现在我渐渐喜欢上了用cl来编译,省得建一个好几兆的项目,而且参数可以灵活选择。后面我会继续学习如何写make file。
在cmd输入cl -I"d:/programs/python26/include" spam.cpp,会生成spam.obj。
再输入link spam.obj /DLL /libpath:"d:/programs/python26/libs",生成spam.dll。
下面到python中导入:
>>> import ctypes
>>> cdll=ctypes.cdll.LoadLibrary('d:/spam.dll')
>>> cdll.multiply(2,3)
6
如果是在Linux下面:
在/home/Henry下建立spam.c
编译:$ gcc -o libspam.so -fpic -shared spam.c
进入Python:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
但是ctypes对C++的DLL导入不行。对于C++库的导入还是要借助于Boost.python。
我一定会回来的!