我有一个c程序(.c文件)。我正在将其转换为共享对象(.so)。如何从 python 代码中调用并运行共享对象?如果可能,请向我推荐可以帮助我完成此任务的库列表。
如果您想在共享对象内调用函数,那么标准模块ctypes就是您所追求的。不需要任何外部库。
加载库:
from ctypes import *
# either
libc = cdll.LoadLibrary("libc.so.6")
# or
libc = CDLL("libc.so.6")
然后从库中调用函数,与调用Python函数相同:
print(libc.time(None))
使用推荐方法的人请注意。它不适用于Windows,适用于Linux,Windows功能的代码如下:
from ctypes import *
libc = cdll.msvcrt
并称之为,
print(libc.time(None))
如果 .so 文件公开了
PyInit_<module_name>
函数,则可以将其路径(或父目录的路径)添加到环境变量 PYTHONPATH
中。然后您可以通过import <module_name>
导入模块。注意:看起来 .so 文件的名称必须与暴露的模块名称<module_name>
匹配。
更多信息请参见:https://docs.python.org/3/extending/building.html
添加此答案以供参考。