首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Curses库不支持OS X high sierra上的宽字符

Curses库不支持OS X high sierra上的宽字符
EN

Stack Overflow用户
提问于 2017-12-31 19:51:15
回答 1查看 1.5K关注 0票数 2

OS X 10.13.2 (高塞拉)。

我正在尝试编写支持widechar的简单curses程序,但似乎默认的(预装的库) curses不支持widechar:

最简单的程序示例(来自here):

代码语言:javascript
复制
#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:致命错误:找不到'ncursesw/ncurses.h‘文件

已尝试在手册页中查找:

man addwstr说:

代码语言:javascript
复制
   #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);

正如手册页所说,尝试包含"curses.h“而不是"ncursesw/ncurses.h”。再次编译错误:

test.cpp:9:5:错误:使用了未声明的标识符'mvaddwstr';您的意思是'mvaddstr‘吗?

已尝试在/usr/include中查找任何与widechar相关的curses头文件。没有结果。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-31 22:31:42

如果您使用如下命令,则第二个示例(使用<curses.h>)将适用于MacOS:

代码语言:javascript
复制
gcc -o foo -D_XOPEN_SOURCE_EXTENDED foo.c -lncurses

这就是:

  • 您必须打开定义以使宽字符功能可见(您可以通过读取头文件来查看),而
  • 库名是"ncurses“(尽管它包含宽字符函数)。

代码语言:javascript
复制
nm /usr/lib/libncurses.dylib | grep addwstr

要查看此信息,请执行以下操作:

代码语言:javascript
复制
0000000000024c39 T _addwstr
0000000000024fba T _mvaddwstr
00000000000254ad T _mvwaddwstr
000000000002580c T _waddwstr

截至2018年年中,MacOS 仅捆绑了一个非常旧的ncurses库(5.7,在2008中发布)和一个相应的旧终端数据库。您可以通过以下方式查看

代码语言:javascript
复制
$ /usr/bin/tic -V
ncurses 5.7.20081102

有趣的是,动态库的文件名暗示它实际上是ncurses 5.4 (又老了4年),但是ticcurses.h头文件显示的编译版本告诉我们实际的版本。如上所述,该库包含宽字符库所需的符号。大多数系统使用的ncurses和ncursesw库之间的名称区别早于ncurses 5.4 (再次)几年,因此苹果的配置会让大多数开发人员感到困惑。

对于开发,您应该考虑使用更新的工具,例如MacPortshomebrew。对于那些人,配置详细信息很容易获得,并且(毫不奇怪)提供了带有库的ncurses

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48042203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档