【问题标题】:Getting GCC error when using SQLite and Fast Math: "SQLite will not work correctly with the -ffast-math option of GCC"使用 SQLite 和 Fast Math 时出现 GCC 错误:“SQLite 无法与 GCC 的 -ffast-math 选项一起正常工作”
【发布时间】:2018-02-21 23:39:07
【问题描述】:

我正在尝试编译 C 项目,但收到错误消息“SQLite 无法与 GCC 的 -ffast-math 选项一起正常工作”。我想知道如何绕过此错误(尽管我不确定这样做的含义)或任何其他可能更合适的解决方案。

【问题讨论】:

    标签: c sqlite


    【解决方案1】:

    如果您查看 SQLite 源代码,您会发现此错误来自 SQLite 的 sqlite3IsNaN 的后备实现,当与 NaN 操作数一起使用时,它依赖于 IEEE 对 != 运算符的古怪定义。

    如果您的 C 库中有一个有效的 isnan 函数,您可以使用 #define SQLITE_HAVE_ISNAN,这将使 SQLite 使用现有的 isnan 而不是滚动自己的。

    或者,您可以不使用-ffast-math 来编译 SQLite。

    【讨论】:

    • FWIW,这里是有问题的代码:sqlite.org/cgi/src/artifact/d9eb0a6c4aae1b00
    • 我认为你错过了根本原因:OP 在他们的环境中有一些古怪的 CFLAGS。
    • 这解决了我的问题,我正在做一个可以更改 CFLAGS 的项目。所以这对我来说是正确的解决方案。谢谢!
    【解决方案2】:

    发生此错误是因为您在 CFLAGS 中使用 gcc 选项 -ffast-math 配置了构建。可能发生的事情是您在您的环境中导出了默认 CFLAGS,可能来自您的.bashrc/.bash_profile/.profile。如果是这样,你真的应该删除它,因为-ffast-math 是有害的,并且会破坏不适合与它一起使用的代码。

    要解决此问题,请先彻底清理构建树并从头开始。然后从设置的位置删除 CFLAGS,注销并重新登录,或者在运行构建系统的配置脚本或类似脚本之前在 shell 中unset CFLAGS。

    【讨论】:

      猜你喜欢
      • 2013-12-10
      • 2019-09-22
      • 2011-11-17
      • 2021-11-26
      • 1970-01-01
      • 2013-08-14
      • 2011-11-07
      • 2016-08-24
      • 2016-03-25
      相关资源
      最近更新 更多