2017-08-22 84 views
1

我想提供本網頁此包裝例子中,我發現: https://pgi-jcns.fz-juelich.de/portal/pages/using-c-from-python.html從Python的使用C:如何創建一個ctypes包裝

我創建sum.c稱爲C文件:

int our_function(int num_numbers, int *numbers) { 
    int i; 
    int sum; 
    for (i = 0; i < num_numbers; i++) { 
     sum += numbers[i]; 
    } 
    return sum; 
} 

cc -fPIC -shared -o libsum.so sum.c 

然後寫了一個sum.py文件嘗試調用它:

然後使用它編譯

import ctypes 

_sum = ctypes.CDLL('libsum.so') 
_sum.our_function.argtypes = (ctypes.c_int, ctypes.POINTER(ctypes.c_int)) 

def our_function(numbers): 
    global _sum 
    num_numbers = len(numbers) 
    array_type = ctypes.c_int * num_numbers 
    result = _sum.our_function(ctypes.c_int(num_numbers), array_type(*numbers)) 
    return int(result) 

,然後我寫了一個test.py文件試圖調用這個C函數在python:

import sum 
print sum.our_function([1,2,-3,4,-5,6]) 

但這個錯誤是坡平了,我不知道爲什麼,因爲我可以清楚地看到 的libsum.so在文件夾中有

OSError: libsum.so: cannot open shared object file: No such file or directory 
+1

test.py is import sum print sum.our_function([1,2,-3,4,-5,6]) – Yuan

+1

您需要lisbsum.so的完整路徑([first result](https:/ /stackoverflow.com/questions/5081875/ctypes-beginner#5082294)與我的搜索引擎)。 –

+0

謝謝你這麼辛苦,救了我這麼多時間!!!!!! – Yuan

回答

0

同一個節目,我能夠組合物1並將libsum.so文件複製到python的lib目錄後運行。但是所得到的總和並不是正確的。爲什麼?

相關問題