【问题标题】:Extern Variables seemingly not working "symbols not found for architecture x86_64"外部变量似乎不起作用“未找到架构 x86_64 的符号”
【发布时间】:2023-09-21 17:06:01
【问题描述】:

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

我制作了一个使用 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

有人对此有什么想法吗?

【问题讨论】:

  • 您是否将externFile.h 包含在externFile.c 中?
  • ...在 main.c 中?它必须在两者中。
  • 显示完整的main.c。我有一种感觉 plymain 本地的....
  • 请发布显示问题的Minimal, Complete, and Verifiable example。涉及的三个文件总共只需要十几行。
  • 您可以在main(以及任何其他函数)之外定义一个全局变量。

标签: c variables global extern


【解决方案1】:

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

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

这里,ply 是一个局部变量,而不是全局变量,因为它是在函数内部定义的。头文件中的extern 行没有定义全局,而是声明它。它说“这个变量存在于某处”,但它没有创建它。因为没有全局定义,所以会出现未定义的引用错误。

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

int ply = 5;

int main(void) 
{ 
    printPly(); 
}

【讨论】:

    最近更新 更多