2012-06-17 3 views
1

나는 ctypes를 사용하여 fann (C로 작성된 신경망 라이브러리)을 python3에 사용하려고합니다. 여기 내 축소 된 코드는 지금까지 있습니다 :python3 가져온 라이브러리에서 반환 유형에 대해 ctypes 구조체를 정의하는 방법

from ctypes import * 
cdll.LoadLibrary("/usr/local/lib/libdoublefann.dylib") 
fann = CDLL("/usr/local/lib/libdoublefann.dylib") 


# Call fann to create a neural network 
nn = fann.fann_create_from_file(b'/Users/xxxxx/Code/fanncode/net/nnf_25_1339802027.net') 

# this outputs 3909360 
print(nn) 

나는 시도하고 지금 fann 신경망해야 윈 변수에 대한 fann 라이브러리에 다른 함수를 호출하면, 나도 (예를 들어 Segmentation fault: 11 또는 AttributeError: 'int' object has no attribute 'getMSE'를 얻을 수).

:

FANN_EXTERNAL struct fann *FANN_API fann_create_from_file(const char * configuration_file) 

그래서 내가 선언 할 필요가 있다고 생각 : 내 문제는 함수에 대한 fann 문서 fann_create_from_file 상태 반면,하는 ctypes 설명서에 따라 변수 nn은, int를 되 고 종료하는 것을 생각 다음

그리고

class FANN_API(Structure): 
    <fields and things which I don't know what they should be> 
는 수행

fann.fann_create_from_file.restype = FANN_API 

내 문제는 내가 구조체 FANN_API이해야 찾을 수 없다는 것입니다. fann.h의 130 행에는 #define FANN_API이 있지만 그 정의 나 그 뒤에 나오는 것은 없습니다.

구조체를 정의해야한다고 생각하는 것이 맞습니까? 그렇다면 어떻게 파이썬 코드에서 선언 할 수있는 형식을 찾을 수 있습니까? 그렇지 않다면 아무도 내가해야 할 일을 제안 할 수 있습니다/내 코드를 작동 시키려면 무엇을 읽어야합니까?

감사합니다.

답변

1

ctypes에 함수의 인수와 반환 코드를 알릴 수 있습니다. struct fann *이 함수의 반환 유형입니다

fann.fann_create_from_file.restype = c_void_p 
fann.fann_create_from_file.argtypes = [c_char_p] 

하는 것으로 : 당신이 구조의 내용을 조작하는 몇 가지 이유가없는 당신은 멀리 c_void_p (무효 *)와 유형으로 얻을 수 있어야합니다. FANN_API은 호출 규칙을 나타냅니다. 귀하는 그것이 #define FANN_API으로 정의되었다고하셨습니다. 아무 것도 없음으로 정의하면 기본 호출 규칙이 적용되므로 CDLL을 사용해야합니다.

좀 더 구체적으로 정의해야 할 경우 struct fann의 정의를 게시하십시오.

+0

저를 위해 약간의 문제를 해결해 주셔서 감사합니다. c_void_p를 사용하여 시도했지만 작동하지 않습니다. 나는 FANN 소스 코드에 대해 알아보고 ctyp에서'struct fann'을 만드는 법을 알아야합니다. – ilikeprogramming

관련 문제