我试图使用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&#39;:
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
提前致谢!
答案 0 :(得分:2)
这是一个链接器错误(参见this,几乎是重复的)。 pkg-config通常知道ncurses
(在需要时提供更多依赖项),因此请尝试编译:
gcc -Wall -Wextra -g \
$(pkg-config --cflags ncurses) \
get_char_example.c \
$(pkg-config --libs ncurses)
您希望Invoke GCC包含所有警告和调试信息;您可以use GDB,可能在emacs
或ddd
下进行调试。
更好的是,使用一些build automation工具(例如make
或ninja
)。 GNU make
从this获取灵感来编写Makefile
(其中标签 -s很重要)。
在我的Debian Sid上,pkg-config --cflags ncurses
提供-D_GNU_SOURCE -D_DEFAULT_SOURCE
而pkg-config --libs ncurses
提供-lncurses -ltinfo
,因此只需与-lncurses
关联即而不是足够(这就是为什么this今天在2017年11月并不完全重复;几年前与简单-lncurses
联系就足够了,今天它不是。)
使用pkg-config --list-all
查找pkg-config已知的所有包和库;在开发您的库时,请考虑为其提供一些.pc
文件。
顺便说一下,您的程序应该首先使用initscr
初始化并使用printw
;即使它有点旧,也请阅读Ncurses-programming-HowTo。
另请注意,在21 st 世纪中使用ASCII已过时。 程序和计算机使用UTF-8 everywhere ,这会产生深刻的后果,您应该注意(因为UTF-8字符可以跨越几个< / em> bytes)。我的法语键盘具有²
,§
,€
和é
的键(即使使用美国键盘也可以粘贴它们),这些键都不是ASCII格式。还可以考虑使用像libunistring这样的UTF-8库。