c - 使用 -ffast-math (-ffinite-math-only) 和 glibc 2.31 链接错误
问题描述
最近,glibc(即 glibc 2.31,包含在 Ubuntu 20.04 中)似乎已经删除了像__exp_finite()
.
这些函数在使用 gcc 的选项-ffinite-math-only
(或-ffast-math
启用该选项)进行编译时使用。
我的问题是我已经编译了第三方提供的封闭源__exp_finite()
静态库,这些库可能是用这个标志编译的,并且这些库生成链接错误到缺少的数学函数,如.
我的问题是我更好的解决方案是什么?
- 将问题提交给第三方,要求他们从命令行中删除违规标志并等待(几个月......)?
- 将问题提交给 glibc 开发人员,解释他们破坏了与此构建选项的兼容性?
- 定义自己缺少的功能?
- ?
我宁愿省略涉及在与 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); }
}
这是迄今为止最快的解决方案。
推荐阅读
- docker - Docker Bridge 网络 TCP 重传
- reactjs - 使用 PrivateRoute 时 URL 发生变化
- reactjs - 从firebase检索(allpost)数据并使用uid也想检索用户信息
- php - 如何在 Datatables 服务器端处理中实现 Ajax 调用
- flutter - 查看 Flutter 网站时不显示自定义字体
- datetime - ASP CORE 动态更新 viewbag 日期标题
- debian - Debian 存储库失败
- python - 如何删除 numpy 数组中的非对称对?
- r - 具有嵌套随机效应的 lmer 模型的预测
- node.js - node.js 服务器出现错误:在 godaddy vps linux 服务器中使用端口 80 或 443 而不是 3000 时,监听 EACCES:PERMISSION denied 0.0.0.0.80