mingw gcc 上的 __uint128_t
我正在尝试在 mingw gcc 下编译 ac 程序。该程序使用 __uint128_t
整数。当我尝试在同一台 64 位机器上的标准 ubuntu gcc 下编译它时,它完美地工作了。但是,当我尝试在 mingw 下为 Windows 编译它时,它甚至无法识别 __uint128_t 关键字。这意味着什么? mingw下没有128位整数吗? 如果没有,是否有任何具有本机(和快速)128 位整数的 Windows 编程语言?
I'm trying to compile a c program under mingw gcc. This program is using an __uint128_t
integer. When I try to compile it under the standard ubuntu gcc on the same 64-bit machine, it perfectly works. But then, when I try to compile it for windows under mingw, it simply doesn't even recognize the __uint128_t
keyword. What does this mean? There aren't 128 bit integers under mingw?
If not, is there any programming language for windows which has native (and FAST) 128 bit integers?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要
__int128_t
编译的版本,然后使用
int64_t
对进行模拟,其方式与模拟 64 位整数相同32 位(如果它们在 32 位编译上不可用)You need
__int128_t
is then emulated by using pairs ofint64_t
in the same way as 64bit integers are emulated with 32bit if they are not available on 32bit compiles我能够使用 Code::Blocks 和默认的 mingw 安装(顺便说一句,IA32)遇到同样的问题,但是,当我安装 TDM 时-MinGW64,它编译得很好(在将 x64 编译器添加到 C::B 后)。因此,请确保您的 mingw 构建面向 x64(使用
-m64
)并且它是 mingw 的 x64 构建,因为__uint128_t
是可选的 x64 ABI 扩展。无论您使用什么 Windows IDE,都不会选择
__int128_t
作为关键字,因为它是一个特殊的 GCC 扩展(如上所述)。I was able to get the same problem using Code::Blocks and the default mingw install (which is IA32 btw), however, when I installed TDM-MinGW64, it compiled fine (after adding the x64 compiler to C::B). So make sure your mingw build is targeting x64 (with
-m64
) and it is an x64 build of mingw, as__uint128_t
is an optional x64 ABI extension.whatever windows IDE you are using won't pick up
__int128_t
as a keyword though, as its a special GCC extension (as mentioned).执行 gcc -dM -E -
/dev/null | grep INT128
。如果它输出宏#define __SIZEOF_INT128__ 16
,则__uint128_t
可用。如果它不输出宏或者小于 16,则 __uint128_t 不可用。另请参阅 128 位整数 - 无意义的文档?在 GCC 用户邮件列表上。
Perform
gcc -dM -E - < /dev/null | grep INT128
. If it output the macro#define __SIZEOF_INT128__ 16
, then__uint128_t
is available. If it does not output the macro or its less than 16, then__uint128_t
is not available.Also see 128-bit integer - nonsensical documentation? on the GCC users mailing list.