外部变量似乎不起作用 "symbols not found for architecture x86_64"

Extern Variables seemingly not working "symbols not found for architecture x86_64"

我一直在通过 Whosebug 和网络搜索答案,看起来我做的是正确的,但我无法让它工作。

我制作了一个使用 extern 的测试程序,(它在 xCode 上使用项目功能,如果有区别的话)。我正在尝试声明一个变量,我可以在我的程序中的任何地方访问它,每当我更改该变量的值时,我希望能够访问更改后的值。

到目前为止我所做的是我有一个头文件

 externFile.h

还有一个

externFile.c

当然还有我的 main.c

在externFile.h中我定义了:

 extern int ply;

在 main.c 我有:

int main()
{
   int ply;
   ply = 5;
   printPly();
}

在 externFile.c 我有:

 void printPly(){
 printf("%d is ply.\n", ply);
 }

但是我收到了这个错误:

 _ply referenced from _printPly
 ld symbols not found for architecture x86_64

有人对此有什么想法吗?

您实际上还没有全局定义 ply

int main(void) 
{ 
    int ply; 
    ply = 5; 
    printPly(); 
}

这里,ply是局部变量,不是全局变量,因为它是在函数内部定义的。头文件中的 extern 行没有定义全局,但是 声明了 它。它说 "this variable exists somewhere",但它不会创建它。因为没有全局定义,你得到一个未定义的引用错误。

全局变量必须在文件范围内定义,即在函数之外:

int ply = 5;

int main(void) 
{ 
    printPly(); 
}