【问题标题】:What is the correct way to use wide-char ncurses on Debian/Ubuntu?在 Debian/Ubuntu 上使用宽字符 ncurses 的正确方法是什么?
【发布时间】:2015-10-06 07:50:59
【问题描述】:

我正在编写一个使用 ncurses 的应用程序。

在 Debian 和 Ubuntu 中,我可以选择以下软件包:

  • libncurses5-dev
  • libncursesw5-dev

w 版本包括宽字符支持,这正是我想要的。

但是,如果我只安装libndursesw5-dev,当我使用-lncurses-lncursesw 编译时会收到一条错误消息,它告诉我找不到curses.hncurses.h

同时安装libncurses5-devlibncursesw5-dev 并使用-lncursesw 有效,但我不确定这是否是正确的方法,或者只是巧合似乎有效。使用-lncurses 将引入非宽字符库。

作为参考,在 Mac OS X 10.11 上,-lncurses 有效(支持宽字符),-lncursesw 根本无效。

【问题讨论】:

  • 这个问题应该转移到 AskUbuntu,因为它涉及 Ubuntu 如何专门打包他们的库。我的猜测是 libncursesw5-dev 依赖于正常的 libncurses5-dev 包才能工作,只是添加了宽字符支持。
  • 在 debian #include <ncursesw/ncurses.h> 上使用 -lncursesw 编译

标签: c ubuntu ncurses


【解决方案1】:

Debian 安装两个头文件

/usr/include/curses.h
/usr/include/ncursesw/curses.h

作为兼容性的解决方法。后者“大部分”兼容,但仅在编译时兼容。例如,WINDOW 结构在后者中更大。第一个 (/usr/include/curses.h) 是“标准的”,但比 ncursesw 库早几年。由于移植了 ncurses 的一些平台不使用 ncurses 作为系统 curses 库(例如,Solaris),因此规定将 ncurses 的标头放在子目录中以避免覆盖(或与)系统标准 curses.h (请参阅 ncurses 常见问题解答 Is the ncurses library compatible with my system?)。

由于 Debian 以 ncurses 作为系统 curses 库开始,它的打包者选择使用相同的解决方法来避免 ncurses 和 ncursesw 之间的冲突。其他一些系统上的打包者可以选择将 both 放在子目录中,并在他们的打包脚本中创建一个链接,例如

/usr/include/curses -> /usr/include/curses/ncurses.h

我记得 Cygwin 做过类似的事情,并省略了 unctrl.h 的链接(一个错误,因为它也是标准标题)。

对于 OSX,系统只提供 ncurses(不是 ncursesw),大多数使用 ncursesw 的人通过 MacPorts 之类的工具来执行此操作,它会安装 ncursesw 标头(如果应用程序定义了 @ 987654328@ 为 ncursesw 编译时, 因为WINDOW 的声明是 ifdef'd 以允许支持任一库)。 Debian 打包者更加谨慎,并选择将标头分开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-21
    • 2012-05-09
    • 1970-01-01
    • 2014-10-31
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多