📜  在Python中使用 C 代码 |设置 2

📅  最后修改于: 2022-05-13 01:55:31.297000             🧑  作者: Mango

在Python中使用 C 代码 |设置 2

先决条件:在Python中使用 C 代码 |设置 1

在上一篇文章中,我们讨论了如何在Python中访问 C 代码。现在,让我们看看如何访问 C 函数。

代码 #1:使用Python访问 C 函数

import work
  
print ("GCD : ", work.gcd(35, 42))
  
print ("\ndivide : ", work.divide(42, 8))
  
print ("\navg : ", work.avg([1, 2, 3]))
  
p1 = work.Point(1, 2)
p2 = work.Point(4, 5)
print ("\ndistance : ", work.distance(p1, p2))

输出 :

GCD : 7

divide : (5, 2)

avg : 2.0

distance : 4.242640687119285


问题 ?
现在上面所做的工作有一个问题,即为了将 C 和Python代码整体打包在一起,使用ctypes访问已编译的 C 代码,必须确保将共享库放置在work.py模块可以找到它。一种可能性是将生成的libsample.so文件与支持的Python代码放在同一目录中。

因此,如果 C 库安装在其他地方,则必须相应地调整路径。如果它作为标准库安装在机器上,则可以使用ctypes.util.find_library()函数。

代码 #2:路径示例

from ctypes.util import find_library
  
find_library('m')
  
find_library('pthread')
  
find_library('sample')

输出 :

/usr/lib/libm.dylib

/usr/lib/libpthread.dylib

/usr/local/lib/libsample.so

同样,如果ctypes无法使用 C 代码找到库,则它根本无法工作。 ctypes.cdll.LoadLibrary()用于加载 C 库,一旦它的位置是已知的。

_mod = ctypes.cdll.LoadLibrary(_path)