You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Solaris 10迁移至Solaris 11时uint64_t未定义问题的正确修复方式

32位Solaris 11编译时uint64_t未定义问题的正确修复方式

问题背景

将遗留产品的C/C++开发环境从Solaris 10迁移到32位Solaris 11后,编译阶段出现uint64_t未定义的错误。排查发现Solaris 11新增了包含这类固定宽度整数类型的系统头文件,而Solaris 10没有;按C99标准,32位系统本应支持uint64_t,但查看int_types.h后发现,必须定义_LONGLONG_TYPE才能启用该类型。

直接定义_LONGLONG_TYPE的问题

直接在Makefile中添加-D_LONGLONG_TYPE会触发编译错误:

"/usr/include/sys/feature_tests.h", line 394: #error: "No long long in strictly conforming ANSI C & 1990 ISO C environments"

这是因为Solaris的头文件会严格检查编译环境的标准模式,直接定义_LONGLONG_TYPE绕过了标准检查,违反了ANSI C(C90)的严格约束。

使用-D_STDC_C99是正确的修复方式

改用-D_STDC_C99能正常编译,这个方案是合理的,原因如下:

  • C99标准明确要求支持uint64_t这类固定宽度整数类型,完全匹配你的需求
  • 定义_STDC_C99后,Solaris的feature_tests.h会自动启用C99相关特性,其中就包括自动定义_LONGLONG_TYPE,既满足了头文件的要求,又符合标准规范
  • 对于遗留代码来说,只要代码本身没有依赖C90的严格特性,这个选项不会引入兼容性问题;Solaris 10的编译环境可能默认使用了非严格的C模式,迁移到Solaris 11后明确指定C99标准是合理的适配动作

如果是C代码,也可以考虑用-std=c++98或更高版本的标准选项(如果代码兼容),不过-D_STDC_C99在C/C混合环境中也能正常工作。

内容的提问来源于stack exchange,提问作者Brie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:40:01