6.3. Ncurses-6.4-20230520

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

估计构建时间: 0.3 SBU
需要硬盘空间: 51 MB

6.3.1. 安装 Ncurses

首先,保证在配置时优先查找 gawk 命令:

sed -i s/mawk// configure

然后,运行以下命令,在宿主系统构建tic程序:

mkdir build
pushd build
  ../configure
  make -C include
  make -C progs tic
popd

准备编译 Ncurses:

./configure --prefix=/usr                \
            --host=$LFS_TGT              \
            --build=$(./config.guess)    \
            --mandir=/usr/share/man      \
            --with-manpage-format=normal \
            --with-shared                \
            --without-normal             \
            --with-cxx-shared            \
            --without-debug              \
            --without-ada                \
            --disable-stripping          \
            --enable-widec

新的配置选项的含义:

--with-manpage-format=normal

这防止 Ncurses 安装压缩的手册页面,否则在宿主发行版使用压缩的手册页面时,Ncurses 可能这样做。

--with-shared

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

--without-normal

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

--without-debug

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

--with-cxx-shared

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

--without-ada

这保证不构建 Ncurses 的 Ada 编译器支持,宿主环境可能有 Ada 编译器,但进入 chroot 环境后 Ada 编译器就不再可用。

--disable-stripping

该选项防止构建过程使用宿主系统的 strip 程序。对交叉编译产生的程序使用宿主工具可能导致构建失败。

--enable-widec

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

编译该软件包:

make

安装该软件包:

make DESTDIR=$LFS TIC_PATH=$(pwd)/build/progs/tic install
ln -sv libncursesw.so $LFS/usr/lib/libncurses.so
sed -e 's/^#if.*XOPEN.*$/#if 1/' \
    -i $LFS/usr/include/curses.h

安装选项的含义:

TIC_PATH=$(pwd)/build/progs/tic

我们需要传递刚刚构建的,可以在宿主系统运行的 tic 程序的路径,这样才能正确创建终端数据库。

ln -sv libncursesw.so $LFS/usr/lib/libncurses.so

我们很快将会构建一些需要 libncurses.so 库的软件包。创建该符号链接,使得这些包使用 libncursesw.so 作为替代。

sed -e 's/^#if.*XOPEN.*$/#if 1/' ...

头文件 curses.h 包含若干 Ncurses 数据结构的定义。在使用不同预处理器宏定义时,可能使用两套不同的数据结构定义:一套是用于 8 字节字符的定义,和 libncurses.so 兼容;而另一套是用于宽字符的定义,和 libncursesw.so 兼容。由于我们使用 libncursesw.so 替代 libncurses.so,修改这个头文件,使之总是使用与 libncursesw.so 兼容的宽字符数据结构定义。

该软件包的详细信息可以在第 8.30.2 节 “Ncurses 的内容”中找到。