以下C代码出了什么问题!

时间:2011-07-22 08:16:55

标签: c++ c

我在C和C ++中尝试了以下代码。file1是ac文件。file2是c ++文件,file3是名称magling的头文件。

file1.c中

#include<stdio.h>
#include<stdlib.h>
#include "file3.hpp"

int main(int argc,char **argv)
{
int a[5];
int i;
for(i=0;i<5;i++)
    a[i] = i;
printf("%d",a[17]);
return 0;
}

file2.cpp

#include "file3.hpp"

int printtrial(int number)
{
return number;
}

file3.hpp

#ifdef __cplusplus
extern "C"
{
#endif

extern int printtrial(int number);

#ifdef __cplusplus
}
#endif

我使用以下命令编译它:

gcc -c file1.c
g++ -c file2.cpp
gcc -o output file1.o file2.o

在此,它给出了错误:

file2.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

有谁能告诉我发生了什么事!

2 个答案:

答案 0 :(得分:7)

由于您的某个文件被编译为c ++,因此使用g++进行链接阶段。

请参阅:What is __gxx_personality_v0 for?

答案 1 :(得分:2)

C和C ++可执行文件需要存在一些库,这些库在链接阶段包含在内:

gcc -o output file1.o file2.o

这里的问题是您尝试使用C链接器链接C ++文件。 gcc无法找到C ++运行时所需的某些库。要解决这个问题,你必须使用g ++,就像yi_H所说的那样。