【问题标题】:getting a char from keyboard using curses.h使用 curses.h 从键盘获取字符
【发布时间】:2018-04-14 02:13:14
【问题描述】:

我正在尝试使用 curses.h 从键盘获取字符。 这是我的来源(get_char_example.c):

#include <curses.h>
#include <stdio.h>

int main(void)
{
    char ch;

    printf("Enter a character: ");
    ch = getch();
    printf("\nIts ASCII code is %d\n", ch);

    return 0;
}

我使用如下命令编译:

gcc get_char_example.c -o get_char_example

我收到以下错误:

/tmp/ccjaXwRU.o:在函数'main'中:

get_char_example.c:(.text+0x1c): undefined reference to `stdscr'
get_char_example.c:(.text+0x24): undefined reference to `wgetch'
collect2: error: ld returned 1 exit status

使用:gcc (GCC) 7.2.0 Arch Linux 4.13.9-1-ARCH

提前致谢!

【问题讨论】:

标签: c gcc linker curses


【解决方案1】:

这是一个链接器错误(参见this,几乎是重复的)。 ncurses 通常为 pkg-config 所知(它会在需要时提供更多依赖项),因此请尝试编译:

 gcc -Wall -Wextra -g \
    $(pkg-config --cflags ncurses) \
    get_char_example.c \
    $(pkg-config --libs ncurses)

你想Invoke GCC 提供所有警告和调试信息;你会use GDB,可能在emacs 下或ddd,用于调试。

更好的是,使用一些build automation 工具(如makeninja)。使用GNU makethis 中获取灵感来编写您的Makefile(其中tab-s 很重要)。

在我的 Debian Sid 上,pkg-config --cflags ncurses 提供 -D_GNU_SOURCE -D_DEFAULT_SOURCEpkg-config --libs ncurses 提供 -lncurses -ltinfo,因此仅与 -lncurses 链接是不够(这就是为什么 this 是不完全是 2017 年 11 月的今天的重复;几年前仅使用 -lncurses 链接就足够了,而今天则不然)。

使用pkg-config --list-all 查找pkg-config 已知的所有包和库;在开发您的 库时,请考虑为其提供一些.pc 文件。

顺便说一句,您的程序应该以initscr 初始化并使用printw;阅读Ncurses-programming-HowTo,即使它有点旧。

另请注意,在 21st 世纪使用 ASCII 已过时。 程序和计算机使用UTF-8 everywhere,您应该注意这会产生深远的影响(因为UTF-8 字符可以跨越几个字节)。我的法语键盘有²§é 的键(即使使用美式键盘,您也可以粘贴它们)并且这些都不是ASCII。还可以考虑使用一些 UTF-8 库,例如 libunistring

【讨论】:

  • 为什么不是重复的?他们显然没有与该副本中的答案所涵盖的库链接
  • 因为其他答案没有提到 pkg-config 并且在某些发行版上,尤其是我的 Debian Sid,ncurses 依赖于其他库。
  • 然后找到一个更好的副本,而不是试图从一个常见问题中获得一些快速简单的分数
  • 我让你找一个。我试图快速找到一个副本,但失败了。
  • 但是你在 2017 年今天在 Debian/Sid 上找到的那个是不正确的。几年前是正确的。 ncurses 现在依赖于 tinfo,而几年前的发行版并非如此。教新手在相关时使用pkg-config 是值得的,其他答案甚至都没有提及。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
相关资源
最近更新 更多