总是出现undefined reference to `_aCapvStat',头疼

来源:百度知道 编辑:UC知道 时间:2024/05/12 05:08:43
我在用GCC编译工程的时候,在Link阶段总是出现
undefined reference to `_aCapvStat'
但是在那个文件已经声明了
extern ACAP_STATUS aCapvStat[2];
并且ACAP_STATUS这个结构体定义的头文件也包含进来了,为什么啊?

猜测你出错的情况:
1. 你是想自己定义aCapvStat,而非引用,那你把extern去掉就可以了。
2. 你想引用他人的定义,那你就grep一下ACAP_STATUS aCapvStat[2];的原始定义是在哪个文件里。
如果是在.h中包含之。
如果是在.c中,表明你编译的时候把这个.c落下了,在gcc的源文件中添上即可。

extern并非自己定义,而是引用其他文件的定义。
一般情况extern都用来引用其他.c文件里的定义,因为如果是在.h中定义的,直接包含头文件后,就没有必要在extern它了。

函数“定义” 可以链接进来。

结构“声明”必须用头文件 include 进来.

例如:
aa.c 内容
typedef struct {
int a;
} ACAP_STATUS;

a.c 内容
#include <stdio.h>
#include "aa.c" // 把它 include 进来

void main()
{
ACAP_STATUS aCapvStat[2];
int i;
aCapvStat[0].a=1;
aCapvStat[1].a=2;
for (i=0;i<2;i++) printf("%d ",aCapvStat[i].a);
}

undefined reference to `_aCapvStat'表示使用了未定义的引用(声明)变量,也就是说程序代码中声明了变量aCapvStat,即
extern ACAP_STATUS aCapvStat[2];
但是在程序链接时并没有找到该变量的定义。