【发布时间】:2020-03-30 13:10:42
【问题描述】:
我想使用 cytypes 来加载 C 共享库 (lib*.so),但我注意到在 C 文件中使用 math.h 后,我无法正确加载它。答案总是 0。这是我共享库中的源代码:
#include <math.h>
double mycos(double num){
return cos(num);
}
我只是这样构建它:
gcc -shared -o libtest.so cos.o
这是我的 C 代码来加载它:
#include <stdio.h>
extern double mycos(double num);
int main(){
printf("%lf",mycos(30));
return 0;
}
将我的 libtest.so 添加到 /etc/ld.so.conf 后,我运行我的代码:
gcc test.c libtest.so -lm
./a.out
答案是0.154251,是正确答案。
但是,当我在 Python 控制台中运行它时:
>>> from ctypes import *
>>> mylib = CDLL('/home/ubuntu/test/libtest.so')
>>> y=mylib.mycos(30)
>>> y
0
答案是0。我还测试了其他不使用math.h的共享库,答案是正确的。这是怎么发生的?
【问题讨论】: