小结两种在Python中导入C语言扩展库的方法

一种是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。

我一定会回来的!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值