2012-05-29 60 views
1

可能重複:
What is __gxx_personality_v0 for?未定義的參考`__gxx_personality_v0' 用gcc

我已經看到了這個問題,在這裏流傳着編譯C++代碼的情況下。不過,我要編譯一個純粹的 C代碼,並繼續得到這個錯誤。我被禁止使用「-lstdC++」作爲解決這個gcc問題的方法。如何更改我的代碼以使其工作,以及爲什麼會出現此錯誤?

我的簡化代碼:

//this is main.cpp 
#include <stdio.h> 
int main() 
{ 
    char ch[3]; 
    ch[0] = getc(stdin); 
    ch[1] = getc(stdin); 
    ch[2] = '\0'; 
    printf("%s\n", ch); 
    return 0; 
} 

我的編譯命令是:

gcc main.cpp 
+0

請粘貼您的編譯器/鏈接器命令行? – razlebe

+0

@ugoren please閱讀cerefully。它不是重複的。正如我上面所述,我關心的是C代碼而不是C++。此外我問如何重寫代碼來擺脫錯誤,而不是編譯選項添加! –

+1

@anonymous_infoholic:請回答maverik的問題。你仍然命名爲'.cpp',這可能會在後端丟掉一些工具。 – 0xC0000022L

回答

10

二者必選其一g++ - 因爲你的文件後綴.cpp或文件重命名爲.c並保持命令行的。在Debian 6.0.5上進行測試,使用gcc 4.4.5。

0

人GCC說:

C++源文件通常使用後綴.C之一。 cc,.cpp,.CPP,.C++,.cp, 或.cxx; C++頭文件經常使用.hh,.hpp,.H或(對於共享模板代碼).tcc; 和預處理的C++文件使用後綴.ii。 GCC可以識別具有這些名稱的文件,並且它們會將它們編譯爲C++程序,即使您以與編譯C程序(通常名稱爲gcc)的 相同的方式調用編譯器。