使用Python中的C:如何创建ctypes包装器

使用Python中的C:如何创建ctypes包装器,python,c,ctypes,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; } 然后写了一个sum.py文件,尝试调用它: import 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;
}
然后写了一个
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
文件,试图在python中调用这个C函数:

import sum
print sum.our_function([1,2,-3,4,-5,6])
然而,这个错误突然出现,我不知道为什么,因为我可以清楚地看到 文件夹中的
libsum.so


可能晚了2年。。但是

改变

_sum = ctypes.CDLL('libsum.so')


它为我解决了这个问题

可能晚了两年。。但是

改变

_sum = ctypes.CDLL('libsum.so')


它为我解决了这个问题

test.py是import sum print sum。我们的_函数([1,2,-3,4,-5,6])您需要lisbsum.so的完整路径(使用我的搜索引擎)。非常感谢您,节省了我这么多时间!!!!!!test.py是import sum print sum。我们的_函数([1,2,-3,4,-5,6])您需要lisbsum.so的完整路径(使用我的搜索引擎)。非常感谢您,节省了我这么多时间!!!!!!
_sum = ctypes.CDLL('libsum.so')
import os
_sum = ctypes.CDLL(os.path.abspath('libsum.so'))