为何libc.math模块中缺失logf函数?Windows 10下Anaconda版Cython编译报错求助
解决Cython中libc.math.logf缺失的问题
我来帮你搞定这个问题!你遇到的logf找不到的情况,本质是Cython 0.29.x版本在Windows平台上的libc.math模块没有包含单精度数学函数的绑定,而双精度的log能正常用,是因为它的绑定早就被加入了。
两种可行的解决方案:
1. 手动声明logf函数(无需升级Cython)
既然旧版本的libc.math没包含logf,我们可以直接从标准C头文件<math.h>里手动引入这个函数,代码修改如下:
cimport libc.math # 手动从math.h声明logf cdef extern from "math.h": float logf(float x) cpdef float main(): cdef float v0 = 10.000000 return logf(v0)
这样编译时Cython会直接调用系统标准库中的logf函数,完全避开libc.math的问题。
2. 升级Cython到新版本
Cython在0.30及以上版本已经修复了Windows平台下libc.math中缺失单精度函数(比如logf、sqrtf)的问题。你可以用Anaconda的命令直接升级:
conda install cython>=0.30
升级完成后,你原来的代码就能正常使用libc.math.logf了,不用做任何修改。
补充说明
Windows平台下Cython的libc绑定对应的是微软的MSVCRT库,旧版本的Cython对单精度数学函数的支持不完善,只覆盖了双精度的常用函数,这就是为什么log能用但logf不行的原因。
内容的提问来源于stack exchange,提问作者Marko Grdinić
相关产品推荐
相关产品推荐

