如何使g ++不区分<string>和<string.h>

时间:2017-08-10 07:54:03

标签: c++ gcc compatibility

最近,我遇到了一个非常烦人的问题。我需要编译一些旧的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>之间的差异?

2 个答案:

答案 0 :(得分:0)

  1. 在项目中创建一个目录(让我们称之为foo);
  2. 创建foo/stringfoo/string.h作为符号链接到任何标题的作品;
  3. -Ifoo添加到GCC的编译标记。
  4. 现在,当您加入<string><string.h>时,系统会使用这两个符号链接,并会重定向到实际的系统标题。

答案 1 :(得分:0)

我看到stringstring.h通常仅作为文件实现(第一个string文件名没有扩展名。)

要不包含您需要指定的标准包含路径: -nostdinc