2017-08-10 44 views
-5

最近,我遇到了一個非常惱人的問題。我需要編譯一些舊的C++代碼,這些代碼是用一個非常古老的g ++版本4.1.2編譯的。如何使G ++不辨<string>和<string.h>

我現在找不到g ++版本,所以我用g ++ 4.4.7來編譯它,但是有很多錯誤,比如error: ‘snprintf’ was not declared in this scope

一些工作後,我發現G ++ 4.1.2切勿從<string.h><stdio.h>等區分<string>,也<stdio>。不過G ++ 4.4.7一樣。所以這些錯誤發生了。

由於種種原因,我不能修改舊的源代碼。有沒有辦法可以讓新的g ++忽略<string><string.h>之間的區別?

+2

'srting'和'string.h'是不同的頭。如果舊版本不區分,那麼可能會被視爲錯誤。我看不到你可以告訴'g ++'不要區分它們。 – taskinoor

+0

作爲解決方法,你可能會迫使GCC始終包括''用'-include' – Jarod42

+0

我敢肯定GCC 2.95.3得到這個權利,所以我不認爲有周圍4.1.2迴歸。相反,我認爲你在混合使用C和C++規則。 C++頭文件_may_包含其他頭文件。特別是,'''_may_ include''。你無法依靠這種方式。 – MSalters

回答

0
  1. 在您的項目中創建一個目錄(我們稱之爲foo);
  2. 創建foo/string和以取其頭工作符號鏈接;
  3. 添加-Ifoo到GCC的編譯標誌。當你包括<string><string.h>現在將被用來

兩個符號鏈接,並重定向到實際的系統頭。

0

我看過stringstring.h通常以文件的形式實現(第一個string文件名沒有擴展名)。

不包括標準包括你需要指定路徑:-nostdinc

相關問題