使用<curses.h>,阅读头文件看看你喜欢使用哪个定义:
/*
* With XPG4, you must define _XOPEN_SOURCE_EXTENDED, it is redundant (or
* conflicting) when _XOPEN_SOURCE is 500 or greater. If NCURSES_WIDECHAR is
* not already defined, e.g., if the platform relies upon nonstandard feature
* test macros, define it at this point if the standard feature test macros
* indicate that it should be defined.
*/
#ifndef NCURSES_WIDECHAR
#if defined(_XOPEN_SOURCE_EXTENDED) || (defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0 >= 500))
#define NCURSES_WIDECHAR 1
#else
#define NCURSES_WIDECHAR 0
#endif
#endif /* NCURSES_WIDECHAR */
(只需NCURSES_WIDECHAR 就足够了)。 manual page对此进行了总结。
如果您阅读cursesw.h,您可能会注意到它是针对 C++ 绑定的。
正如另一个答案中所建议的,您可以从 pkg-config 程序中获得一些帮助。但是,对于 Arch Linux,这给出了不同的结果:
$ pkg-config ncurses --cflags --libs
-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -lncursesw
$ pkg-config ncursesw --cflags --libs
-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -lncursesw
也就是说,Arch Linux 打包器已经将 ncurses 的两种配置等同起来; pkg-config 中的两个选择都使用 ncursesw 库。 Arch Linux 软件包确实有一个libncurses.so,但这只是一个告诉链接器使用libncursesw.so 的文本文件。由于它的打包方式,在 Arch Linux 上,你使用哪个库没有区别。
(顺便说一句,结合_GNU_SOURCE 和_DEFAULT_SOURCE 是不正确的,可能不是来自任何发行版的打包系统,因为前者在ncurses five years ago 中已被弃用。