2013-07-27 60 views
0

我在C中編寫了一個Python 3擴展模塊,但似乎無法讓Python導入它。在python3中顯示本地導入嘗試

有什麼辦法讓Python打印出它試圖加載的共享庫(.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的約定。所以對於一個lib,你不會將其命名爲libmylib.so,而是mylib.so

更糟糕的是,它只加載my_main,當時這樣命名爲my_main.so。很煩人。

回答

0

試着看/proc/<pid>/maps目錄。

或嘗試在shell中使用lsof -p <PID>命令。

答案來源於this forum。 lsof man page。另請參閱this answer

+0

這只是有用的,所以我知道它根本不加載我的.so。儘管如此,我還是缺乏基本的工具來查看python試圖加載的內容以及爲什麼以及爲什麼會失敗。 – abergmeier