使用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'))