我想使用ctypes映射在庫libtorque.so
中聲明爲全局的int值pbs_errno
。使用ctypes映射來自共享庫的全局變量
目前我可以加載庫,像這樣:
from ctypes import *
libtorque = CDLL("libtorque.so")
,並已成功繪製了一堆的功能。但是,出於錯誤檢查的目的,他們中的很多人都設置了pbs_errno
變量,所以我也需要訪問該變量。但是,如果我嘗試訪問它,我得到:
>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>
當然,它不是一個函數指針,並試圖把它導致賽格故障。
在主標題中聲明爲int pbs_errno;
,在API頭文件中聲明爲extern int pbs_errno;
。
objdump顯示符號爲:
00000000001294f8 g DO .bss 0000000000000004 Base pbs_errno
John的回答是正確的。設置restype只會改變函數的返回類型AFAICT。如果我真的試圖將pbs_errno作爲函數調用,則會導致段錯誤。 – 2009-02-13 16:10:42