OS X 10.13.2(高山脉)。
我尝试使用widechar支持编写简单的curses程序,但看起来,默认(预安装的库)curses不支持widechar:
最简单的程序示例(来自here):
#include <ncursesw/ncurses.h>
#include <locale.h>
#include <wchar.h>
int main() {
setlocale(LC_ALL, "");
initscr();
wchar_t wstr[] = { 9474, L'\0' };
mvaddwstr(0, 0, wstr);
refresh();
getch();
endwin();
return 0;
}
没有编译,给出错误:
test.cpp:1:10:致命错误:&#39; ncursesw / ncurses.h&#39;找不到文件
试图在手册页中找到:
man addwstr 表示:
#include <curses.h>
int addwstr(const wchar_t *wstr);
int addnwstr(const wchar_t *wstr, int n);
int waddwstr(WINDOW *win, const wchar_t *wstr);
int waddnwstr(WINDOW *win, const wchar_t *wstr, int n);
int mvaddwstr(int y, int x, const wchar_t *wstr);
int mvaddnwstr(int y, int x, const wchar_t *wstr, int n);
int mvwaddwstr(WINDOW *win, int y, int x, const wchar_t *wstr);
int mvwaddnwstr(WINDOW *win, int y, int x, const wchar_t *wstr, int n);
正如man page所说,试图包含&#34; curses.h&#34;而不是&#34; ncursesw / ncurses.h&#34;。再次编译错误:
test.cpp:9:5:错误:使用未声明的标识符&#39; mvaddwstr&#39 ;;你是说&#39; mvaddstr&#39;?
试图在/ usr / include中找到任何与widechar相关的curses头。没有结果。有什么建议吗?
答案 0 :(得分:2)
如果你使用这样的命令,第二个例子(使用<curses.h>
)将适用于MacOS:
gcc -o foo -D_XOPEN_SOURCE_EXTENDED foo.c -lncurses
那是:
待办事项
nm /usr/lib/libncurses.dylib | grep addwstr
看到这个:
0000000000024c39 T _addwstr
0000000000024fba T _mvaddwstr
00000000000254ad T _mvwaddwstr
000000000002580c T _waddwstr
截至2018年中期,MacOS 捆绑 只有一个非常古老的ncurses库(5.7,在2008中发布),以及相应的旧终端数据库。你可以通过
看到$ /usr/bin/tic -V
ncurses 5.7.20081102
有趣的是,动态库的文件名提示它确实是ncurses 5.4(再过4年),但是 tic
和{显示的编译版本{1}}头文件告诉实际版本。如上所述,该库包含宽字符库所需的符号。用于大多数系统的ncurses和ncursesw库之间的名称区别早于ncurses 5.4(再次)几年,因此Apple的配置会让大多数开发人员感到困惑。
对于 开发 ,您应该考虑使用更新的内容,例如MacPorts或homebrew。对于那些,配置细节随时可用,并且(不出所料)提供ncurses w 库。