为什么在Linux上使用curses会出现以下错误?

11

尝试让getch()函数工作以捕获按键。

    #include <curses.h>
    ...
    ...
    WINDOW *w;
    char f;

   w = initscr();
   timeout(3000);
   f = getch();
   endwin();

出现以下错误:

undefined reference to `wgetch'
undefined reference to `stdscr'
2个回答

19

这是一个链接错误。您是否正确地将应用 curses 库的链接进来了?

C 语言中使用库涉及两个步骤:

  1. 您需要从源文件中 #include 相关的头文件,以便代码了解库函数的签名。由于您已经做到了这一点,所以第一个步骤是正确的。
  2. 编译代码时,您需要告诉链接器链接相应的库,以便它可以找到这些函数的定义。很遗憾,这一步您还没有完成。如果您正在使用 GCC,请在编译命令行中添加 -lncurses,这样就可以链接到该库了。这里有一个关于 链接的说明

8
使用"-lncurses"选项来链接 curses 库。 - aJ.
1
顺便提一下,在2017年11月最好使用pkg-config,请参见非常相似的问题的这个答案。 - Basile Starynkevitch

0
以上答案是正确的,但格式应该是:
gcc -Wall program.c -o name_of_binary -lncurses
当我这样做时:
gcc -Wall -lncurses program.c...
它没有起作用,所以显然应该在末尾添加。

我使用-Wall进行调试。 - mLstudent33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接