无法使用 ctypes 从 python 调用的 c 库中获取 pi
Cannot get pi from a c library called from python using ctypes
我想了解如何使用 python 的内置 ctypes 模块。我写了一个简单的 c/c++ 代码,其中 returns 圆周率的倍数:
#define pi 3.14159265358979323846 //I tried this one too, not works.
double ppi(int n){
return n*3.14159265358979323846; //The same number multiplied by n
}
我用 Code::Blocks 使用命令
使用 MinGW 编译它
gcc -shared -Wl,-soname,mylib.so -o mylib.so -fPIC mylib.c
我得到了一个可爱的 .so 文件并尝试在 python 代码中使用它:
from ctypes import CDLL
myModule=CDLL('mylib.so')
print(myModule.ppi(1))
print(myModule.ppi(2))
但是 returns:
2226964
2226964
知道为什么会这样吗?
提前致谢!
来自 Return Types 文档:
By default functions are assumed to return the C int
type. Other return types can be specified by setting the restype
attribute of the function object.
所以你应该这样做:
myModule.ppi.restype = c_double
print(myModule.ppi(1))
print(myModule.ppi(2))
我想了解如何使用 python 的内置 ctypes 模块。我写了一个简单的 c/c++ 代码,其中 returns 圆周率的倍数:
#define pi 3.14159265358979323846 //I tried this one too, not works.
double ppi(int n){
return n*3.14159265358979323846; //The same number multiplied by n
}
我用 Code::Blocks 使用命令
使用 MinGW 编译它 gcc -shared -Wl,-soname,mylib.so -o mylib.so -fPIC mylib.c
我得到了一个可爱的 .so 文件并尝试在 python 代码中使用它:
from ctypes import CDLL
myModule=CDLL('mylib.so')
print(myModule.ppi(1))
print(myModule.ppi(2))
但是 returns:
2226964
2226964
知道为什么会这样吗? 提前致谢!
来自 Return Types 文档:
By default functions are assumed to return the C
int
type. Other return types can be specified by setting therestype
attribute of the function object.
所以你应该这样做:
myModule.ppi.restype = c_double
print(myModule.ppi(1))
print(myModule.ppi(2))