8.30. Ncurses-6.4-20230520

Ncurses 软件包包含使用时不需考虑终端特性的字符屏幕处理函数库。

估计构建时间: 0.2 SBU
需要硬盘空间: 45 MB

8.30.1. 安装 Ncurses

准备编译 Ncurses:

./configure --prefix=/usr           \
            --mandir=/usr/share/man \
            --with-shared           \
            --without-debug         \
            --without-normal        \
            --with-cxx-shared       \
            --enable-pc-files       \
            --enable-widec          \
            --with-pkg-config-libdir=/usr/lib/pkgconfig

新的配置选项的含义:

--with-shared

该选项使得 Ncurses 将 C 函数库构建并安装为共享库。

--without-normal

该选项禁止将 C 函数库构建和安装为静态库。

--without-debug

该选项禁止构建和安装用于调试的库。

--with-cxx-shared

该选项使得 Ncurses 将 C++ 绑定构建并安装为共享库,同时防止构建和安装静态的 C++ 绑定库。

--enable-pc-files

该参数使得构建系统生成并安装 pkg-config 使用的 .pc 文件。

--enable-widec

该选项使得宽字符库 (例如 libncursesw.so.6.4) 被构建,而不构建常规字符库 (例如 libncurses.so.6.4)。宽字符库在多字节和传统 8 位 locale 中都能工作,而常规字符库只能在 8 位 locale 中工作。宽字符库和普通字符库在源码层面是兼容的,但二进制不兼容。

编译该软件包:

make

该软件包有测试套件,但只能在安装该软件包后才能运行。测试用例位于 test/ 中。阅读其中的 README 文件了解更多细节。

安装该软件包会直接覆盖文件 libncursesw.so.6.4。这可能导致正在使用该库文件中的代码和数据的 shell 进程发生崩溃。因此,需要使用 DESTDIR 进行安装,并正确地使用 install 命令安装库文件:

make DESTDIR=$PWD/dest install
install -vm755 dest/usr/lib/libncursesw.so.6.4 /usr/lib
rm -v  dest/usr/lib/libncursesw.so.6.4
sed -e 's/^#if.*XOPEN.*$/#if 1/' \
    -i dest/usr/include/curses.h
cp -av dest/* /

许多程序仍然希望链接器能够找到非宽字符版本的 Ncurses 库。通过使用符号链接和链接脚本,诱导它们链接到宽字符库 (注意这里扩展名为 so 的链接只有在已经编辑 curses.h 使之总是使用宽字符 ABI 时才安全):

for lib in ncurses form panel menu ; do
    ln -sfv lib${lib}w.so /usr/lib/lib${lib}.so
    ln -sfv ${lib}w.pc    /usr/lib/pkgconfig/${lib}.pc
done

最后,确保那些在构建时寻找 -lcurses 的老式程序仍然能够构建:

ln -sfv libncursesw.so /usr/lib/libcurses.so

如果需要的话,安装 Ncurses 文档:

cp -v -R doc -T /usr/share/doc/ncurses-6.4-20230520
[注意]

注意

上述指令没有创建非宽字符的 Ncurses 库,因为从源码编译的软件包不会在运行时链接到它。然而,已知的需要链接到非宽字符 Ncurses 库的二进制程序都需要版本 5。如果您为了满足一些仅有二进制版本的程序,或者满足 LSB 兼容性,必须安装这样的库,执行以下命令再次构建该软件包:

make distclean
./configure --prefix=/usr    \
            --with-shared    \
            --without-normal \
            --without-debug  \
            --without-cxx-binding \
            --with-abi-version=5
make sources libs
cp -av lib/lib*.so.5* /usr/lib

8.30.2. Ncurses 的内容

安装的程序: captoinfo (链接到 tic), clear, infocmp, infotocap (链接到 tic), ncursesw6-config, reset (链接到 tset), tabs, tic, toe, tput, 以及 tset
安装的库: libcurses.so (符号链接), libform.so (符号链接), libformw.so, libmenu.so (符号链接), libmenuw.so, libncurses.so (符号链接), libncursesw.so, libncurses++w.so, libpanel.so (符号链接), 以及 libpanelw.so,
安装的目录: /usr/share/tabset, /usr/share/terminfo, 以及 /usr/share/doc/ncurses-6.4-20230520

简要描述

captoinfo

将 termcap 描述转换成 terminfo 描述

clear

如果可能的话,清空屏幕

infocmp

比较或输出 terminfo 描述

infotocap

将 terminfo 描述转化为 termcap 描述

ncursesw6-config

提供 ncurses 的配置信息

reset

以终端默认值重新初始化终端

tabs

清除并设置终端的制表符宽度

tic

Terminfo 条目描述编译器,将 terminfo 文件从源代码格式翻译为 ncurses 库子程序需要的二进制格式 [terminfo 文件包含特定终端的功能信息。]

toe

列出所有可用的终端类型,并给出每种类型的主要名称和描述

tput

使 shell 可以使用终端相关的功能;也可以重置或初始化终端,或者报告它的长名称

tset

可以被用于初始化终端

libncursesw

包含在终端屏幕上以多种复杂方式显示文本的函数;使用这些函数的典型例子是运行内核的 make menuconfig 时显示的目录

libncurses++w

包含该软件包中其他库的 C++ 语言绑定

libformw

包含实现表单的函数

libmenuw

包含实现目录的函数

libpanelw

包含实现面板的函数