【问题标题】:__uint128_t on mingw gcc__uint128_t 上 mingw gcc
【发布时间】:2020-12-28 12:04:22
【问题描述】:

我正在尝试在 mingw gcc 下编译一个 c 程序。该程序使用__uint128_t 整数。当我尝试在同一台 64 位机器上的标准 ubuntu gcc 下编译它时,它完美地工作。但是,当我尝试在 mingw 下为 windows 编译它时,它甚至根本无法识别 __uint128_t 关键字。这是什么意思? mingw下没有128位整数吗? 如果没有,是否有任何具有原生(和 FAST)128 位整数的 Windows 编程语言?

【问题讨论】:

    标签: c gcc mingw 128-bit int128


    【解决方案1】:

    你需要

    • 相对较新的 gcc 版本
    • 使用原生 64 位整数支持编译的版本

    __int128_t 然后使用成对的 int64_t 进行模拟,就像 64 位整数在 32 位编译中不可用时使用 32 位模拟一样

    【讨论】:

      【解决方案2】:

      我能够使用 Code::Blocks 和默认的 mingw 安装(即 IA32 btw)得到同样的问题,但是,当我安装 TDM-MinGW64 时,它编译得很好(在将 x64 编译器添加到 C::乙)。因此,请确保您的 mingw 构建针对 x64(使用 -m64并且它是 mingw 的 x64 构建,因为 __uint128_t 是可选的 x64 ABI 扩展。

      您使用的任何 Windows IDE 都不会选择 __int128_t 作为关键字,因为它是一个特殊的 GCC 扩展(如前所述)。

      【讨论】:

        【解决方案3】:

        但是,当我尝试在 mingw 下为 windows 编译它时,它甚至根本无法识别 __uint128_t 关键字。这是什么意思? mingw下没有128位整数?

        执行gcc -dM -E - < /dev/null | grep INT128。如果它输出宏#define __SIZEOF_INT128__ 16,则__uint128_t可用。如果不输出宏或者小于16,则__uint128_t不可用。

        另请参阅 GCC 用户邮件列表中的 128-bit integer - nonsensical documentation?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-24
          • 1970-01-01
          • 1970-01-01
          • 2012-11-10
          • 2017-01-14
          • 1970-01-01
          相关资源
          最近更新 更多