6.18.1. 安装 Ncurses
Ncurses-5.5 有一个内存泄漏和一些显示的bug被发现,并修正了。应用这些修正:
patch -Np1 -i ../ncurses-5.5-fixes-1.patch
为编译 Ncurses 做准备:
./configure --prefix=/usr --with-shared --without-debug --enable-widec
配置选项的含义:
-
--enable-widec
-
这个选项导致宽字符库(例如,libncursesw.so.5.5)将会替换正常的(例如,libncurses.so.5.5)。这些宽字符库可以在 多字节和传统的8位 locale 下使用,然而正常的库一般只能在 8位 的locale环境下工作。宽字符和正常的库是源码兼容的,但不是二进制兼容的。
编译软件包:
make
这个软件包没有附带测试程序。
安装软件包:
make install
赋予 ncurses 库文件可执行权限:
chmod -v 755 /usr/lib/*.5.5
修正一个不应该有可执行权限的库文件:
chmod -v 644 /usr/lib/libncurses++w.a
把库文件移到更合理的 /lib 目录里:
mv -v /usr/lib/libncursesw.so.5* /lib
由于库文件移动了,所以有的符号链接就指向了不存在的文件。需要重新创建这些符号链接:
ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so
许多的程序依然希望链接器能够发现非宽字符的 Ncurses 库。通过符号链接和链接器脚本来欺骗它使其链接宽字符的库:
for lib in curses ncurses form panel menu ; do \
rm -vf /usr/lib/lib${lib}.so ; \
echo "INPUT(-l${lib}w)" >/usr/lib/lib${lib}.so ; \
ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \
done &&
ln -sfv libncurses++w.a /usr/lib/libncurses++.a
最后,确保一些在编译的时候寻找 -lcurses 的老程序仍然可以编译:
echo "INPUT(-lncursesw)" >/usr/lib/libcursesw.so &&
ln -sfv libncurses.so /usr/lib/libcurses.so &&
ln -sfv libncursesw.a /usr/lib/libcursesw.a &&
ln -sfv libncurses.a /usr/lib/libcurses.a
注意
上面的说明并没有创建非宽字符的 Ncurses 库,因为没有软件包编译后在运行时需要链接到它们的。如果你因为一些只有二进制文件的程序,必须安装这样的库的话,按照下面的命令进行编译:
make distclean &&
./configure --prefix=/usr --with-shared --without-normal \
--without-debug --without-cxx-binding &&
make sources libs &&
cp -av lib/lib*.so.5* /usr/lib