我在C中编写了一个Python 3扩展模块,但似乎无法让Python导入它。
有没有办法让Python打印出它试图加载哪些共享库(.so在Linux上)以及它失败的原因?
可悲的是,我读过的所有文档都没有真正帮助,因为没有一个简洁地描述本机导入过程。
我尝试的是:
ctypes.CDLL("libmydep1.so")
ctypes.CDLL("libmydep2.so")
try:
import my_main
print("Load python")
except:
ctypes.CDLL("libmylib.so")
print("Load shared object")
始终打印Load shared object
。
libmylib.so
包含python入口点,但加载它作为Python 3扩展名似乎不起作用,尽管加载为共享库。
修改
Python不遵守Linux惯例。因此,对于lib,您不要将其命名为libmylib.so
,而是mylib.so
。
更糟糕的是,当它被命名为my_main
时,它只会加载my_main.so
。太烦人了。
答案 0 :(得分:0)
尝试查看/proc/<pid>/maps
目录。
或尝试在shell中使用lsof -p <PID>
命令。
答案来源是this forum。 lsof man page。另请参阅this answer。