문제

int 값을 매핑하고 싶습니다 pbs_errno 도서관에서 글로벌로 선언되었습니다 libtorque.so CTypes 사용.

현재 라이브러리를로드 할 수 있습니다.

from ctypes import *
libtorque = CDLL("libtorque.so")

그리고 많은 기능을 성공적으로 매핑했습니다. 그러나 오류 확인 목적으로 많은 사람들이 pbs_errno 변수이므로 액세스 할 수 있습니다. 그러나 접근하려고하면 다음과 같이받습니다.

>>> pytorque.libtorque.pbs_errno
<_FuncPtr object at 0x9fc690>

물론, 그것은 함수 포인터가 아니며 그것을 호출하려고 시도하면 Seg 결함이 발생합니다.

그것은 다음과 같이 선언됩니다 int pbs_errno; 메인 헤더에서 extern int pbs_errno; API 헤더 파일에서.

objdump는 기호를 다음과 같이 표시합니다.

00000000001294f8 g    DO .bss   0000000000000004  Base        pbs_errno
도움이 되었습니까?

해결책

CTYPES 문서에는 DLLS로 내보내는 값에 대한 액세스에 대한 섹션이 있습니다.

http://docs.python.org/library/ctypes.html#accessing-values-exported-from-dlls

예를 들어

def pbs_errno():
    return c_int.in_dll(libtorque, "pbs_errno")
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top