2012-05-29 54 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)的 相同的方式调用编译器。