链接器在头文件中声明的外部变量出错

时间:2012-05-20 16:26:48

标签: c linker-errors

我有一个头文件a.h,它包含在2.c文件a.c和b.c

A.H

#ifndef A_H_INCLUDE
#define A_H_INCLUDE
extern int g;
void chk(int f);
#endif

交流转换器

# include <stdio.h>
# include "a.h"

void chk(int f)
{
    if(g==1) printf("\n CORRECT\n");
    else printf("\n INcorrect::%d: \n",f);
}   

b.c

# include <stdio.h>
# include "a.h"

int main()
{
  int g;
  printf("\n ENTER::");
  scanf("%d",&g);
  chk(56);
  return 0;
}

在编译代码时,它给了我错误

gcc a.c b.c a.h -o j
/tmp/ccEerIPj.o: In function `chk':
a.c:(.text+0x7): undefined reference to `g'
collect2: ld returned 1 exit status

我已经检查了Variable declaration in a header file,我想我也在做同样的事情。

任何有关代码问题的建议或指针都将受到赞赏。

非常感谢

1 个答案:

答案 0 :(得分:3)

int g;添加到a.c文件的全局范围,以提供变量的定义。

(如果您想知道,main()函数中的 local 变量具有 no 链接,因为它是块范围内的自动变量。与你的问题无关。)