0

我用 C 编写了一个 Python 3 扩展模块,但似乎无法让 Python 导入它。

有什么方法可以让 Python 打印出它尝试加载哪些共享库(Linux 上的 .so)以及为什么会失败?

遗憾的是,我阅读的所有文档都没有真正的帮助,因为没有一个文档以简洁的方式描述本地导入过程。

我尝试的是:

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 约定。所以对于一个库,你不要命名它,libmylib.so但是mylib.so.

更糟糕的是,它只my_main在 so 被命名时加载my_main.so。很烦人。

4

1 回答 1

0

尝试查看/proc/<pid>/maps目录。

或者尝试lsof -p <PID>在 shell 中使用命令。

答案的来源是这个论坛。lsof手册页。另请参阅此答案

于 2013-07-27T11:13:03.023 回答