我在 x64_86 GNU linux 架构上使用 g++ 版本 4.1.2。代码库非常庞大,我对项目中使用的 makefile 没有足够的了解。代码按原样编译得很好。
出于某种调试目的,我需要g++ -E
单独预处理 () 几个源文件,然后重新编译它。我正在使用-I
. 理想情况下,编译应该没问题。
但是我在标准标题中几乎没有差异,例如:
typedef unsigned long size_t;
导致operator new()
编译器生成的声明错误(如果我更改为unsigned int
手动,则此错误消失)- 在像这样的库函数
unsigned long numeric_limits<>::max()
中,编译器会抱怨大数字,例如922...807L
;它生成编译器错误为integer constant is too large for long type
- 不匹配的声明
__errorno_location()
给出编译器错误
我很难找出问题所在。为什么当我在未更改的文件上进行编译时编译会很好,为什么当我g++ -I <> -E
在单个文件上提供选项时标准标题开始乱写?
(请注意,我们编写的代码没有问题,它只是来自标准库方面。我尝试将stddef.h
其定位unsigned int
为 typedef,但这只是解决了第一个问题。)
任何解决此错误的想法将不胜感激。