最近,我遇到了一个非常烦人的问题。我需要编译一些旧的C ++代码,这些代码是用非常古老的g ++版本4.1.2编译的。
我现在找不到旧的g ++版本,所以我用g ++ 4.4.7编译它,但是有许多错误,比如error: ‘snprintf’ was not declared in this scope
。
经过一番工作,我发现g ++ 4.1.2不会将<string>
与<string.h>
区分开,<stdio>
也不会区分<stdio.h>
等。但g ++ 4.4.7 DOES 。所以这些错误发生了。
由于某些原因,我无法修改旧的源代码。有没有办法可以让新的g ++忽略<string>
和<string.h>
之间的差异?
答案 0 :(得分:0)
foo
); foo/string
和foo/string.h
作为符号链接到任何标题的作品; -Ifoo
添加到GCC的编译标记。现在,当您加入<string>
或<string.h>
时,系统会使用这两个符号链接,并会重定向到实际的系统标题。
答案 1 :(得分:0)
我看到string
和string.h
通常仅作为文件实现(第一个string
文件名没有扩展名。)
要不包含您需要指定的标准包含路径: -nostdinc