【问题标题】:Cannot compile basic tutorial in C无法用 C 编译基本教程
【发布时间】:2011-11-28 00:39:58
【问题描述】:

我刚开始尝试学习 C 并且一直在尝试做教程,但它们不会编译。这些错误似乎表明我使用 64 位操作系统 (lion) 存在问题,但我看不出这样一个简单的程序会出现这种情况。

代码:(直接从“thenewboston”教程中复制)

#include <stdio.h>

int main(void)
{
    printf("Hello World");
    getch();
}

然后我在终端输入了这个:

gcc tnb_1.c

我得到的错误是:

Undefined symbols for architecture x86_64:
  "_getch", referenced from:
      _main in cc2nMvOk.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

我使用的编译器是与 xcode 一起安装的标准编译器。

如果这个问题有一个明显的答案,我很抱歉,但由于我无法通过第一个障碍,我发现很难学习任何东西。

感谢您的帮助

【问题讨论】:

  • getch 不是标准的 C 函数。我建议找一个不同的教程。
  • 所有 getch() 要做的就是让你在程序退出之前按下一个键。如果你只是想编译你的第一个程序,你可以忽略它并取得合理的成功。

标签: c gcc osx-lion


【解决方案1】:

如果您将getch() 替换为getchar()getc(stdin),它应该可以工作。不过,正如 Oli Charlesworth 建议的那样,您可能想查看不同的教程。 getch() 在 curses 库(和一些旧的 DOS 编译器)中,因此如果不链接它,您将无法构建可执行文件。如果教程没有指定,那可能不是很好。

【讨论】:

  • 您忘记了 C 将假定尚未声明的函数具有特定签名。它应该发出警告,但它是有效的 C 代码。
  • 是的,我意识到我所说的内容具有误导性,所以我编辑了我的答案。
  • @EthanSteinberg - 注意是链接器阻塞了。
  • 我还首先认为 getch() 来自curses,但事实并非如此。它来自一些 ms-dos 编译器上可用的一组控制台函数。
  • 谢谢,是的,看来我需要一个不同的教程!
【解决方案2】:

使用getchar() 代替getch()getch() 是非标准的。

使用getchar() 将(可能)意味着您需要按回车,而getch() 不需要,但如果您要做的只是编译一个简单的程序来开始使用C,那可能不会对你很重要。

【讨论】:

  • 谢谢,正如您所说,更改为 getchar() 解决了问题。
猜你喜欢
  • 1970-01-01
  • 2015-04-21
  • 2013-03-06
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
相关资源
最近更新 更多