到目前为止,我已经尝试了互联网上提到的所有解决方案,但对我来说却无济于事。
我有一个python代码,为了加快速度,我希望我的代码在C函数中运行大量计算。我已经写了这个C函数。
然后,要共享库,我在终端上完成了此操作:
gcc -shared -Wl,-install_name,testlib.so -o testlib.so -fPIC myModule.c
不会返回任何错误。问题; 当我尝试在python中启动C函数时出现。让我们考虑一下C中的以下简单函数:
int multiplier(int a, int b)
{
int lol = 0;
lol = a*b;
return lol;
}
我启动python3(3.5.2),然后:
import ctypes
zelib = ctypes.CDLL("/Users/longeard/Desktop/Codes/DraII/testlib.so",ctypes.RTLD_GLOBAL)
该库应该可以通过以下方式在python中使用:
res = zelib.multiplier(2,3)
这样做时,它会工作并且python返回
6
问题是,我要使用的函数(我使用的乘数函数仅作为示例)应该将浮点数作为输入并返回浮点数。但是,如果我现在考虑与以前相同的乘数函数,但使用float:
float multiplier(float a, float b)
{
float lol = 0.0;
lol = a*b;
return lol;
}
我使用gcc重新编译,重新导入ctypes并重新执行ctypes.CDLL,而我在python3中这样做:
zelib.multiplier(ctypes.c_float(2),ctypes.c_float(3))
(这里的types.c_float将python中的2转换为C中的float),python将返回:
2
这很奇怪,因为如果我在函数中添加printf来打印大声笑,python将会打印:
6.0
但仍然返回2,有时还是18。即使我printf并返回相同的变量“大声笑”。
我尝试了很多事情,但都无济于事。请问有人有主意吗?谢谢。
尽管@falsetru的答案是更好的解决方法,但是另一种方法是简单地编写C函数以使用double。
调用不带参数列表的函数时,浮点数会自动提升为两倍。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句