-ffast-math (-ffinite-math-only) 和 glibc 2.31 的链接错误

2024-01-11

最近,glibc(即 glibc 2.31,包含在 Ubuntu 20.04 中)似乎删除了诸如__exp_finite().

使用gcc的选项编译时使用了这些函数-ffinite-math-only (or -ffast-math,这会启用上述选项)。

我的问题是我有编译闭源由第三方提供的静态库可能已使用此标志进行编译,并且这些库会生成缺少数学函数的链接错误,例如__exp_finite().

我的问题是我更好的解决方案是什么?

  1. 将问题提交给第三方,要求他们从命令行中删除有问题的标志并等待(几个月......)?
  2. 将问题提交给 glibc 开发人员,解释他们破坏了与此构建选项的兼容性?
  3. 自己定义缺失的功能?
  4. ?

我宁愿省略涉及在与 Ubuntu 提供的本机环境不同的环境中进行编译的解决方案(后来可能是其他发行版,因为它们升级了 glibc)。

希望我正确理解了这个问题,并感谢任何帮助。


我将以下 C++ 文件添加到我们的主项目中,定义了缺少的函数:

#include <math.h>

extern "C" {
    double __exp_finite(double x) { return exp(x); }
    double __log_finite(double x) { return log(x); }
    double __pow_finite(double x, double y) { return pow(x, y); }

    float __expf_finite(float x) { return expf(x); }
    float __logf_finite(float x) { return logf(x); }
    float __powf_finite(float x, float y) { return powf(x, y); }
}

这是迄今为止最快的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

-ffast-math (-ffinite-math-only) 和 glibc 2.31 的链接错误 的相关文章

随机推荐