FreeBSD下编译的ncurses测试程序报错:Error opening terminal: xterm
解决FreeBSD下源码编译ncurses测试程序报错"Error opening terminal: xterm"的问题
我来帮你梳理下问题根源和解决办法,你遇到的情况主要是未完成安装+环境变量设置错误导致的:你只执行了编译但没完成安装,测试程序找不到ncurses配套的terminfo数据;同时你把TERMINFO指向了系统的terminfo.db文件,但ncurses期望这个变量指向terminfo目录(或在编译阶段就指定好db文件路径)。
下面是具体的解决步骤,按优先级排序:
方法1:完成安装并设置正确的环境变量
这是最规范的做法,毕竟你已经指定了安装到主目录:
- 回到ncurses源码目录,执行安装操作:
安装完成后,你的主目录会生成make install$HOME/lib(库文件)、$HOME/include(头文件)、$HOME/share/terminfo(配套的terminfo目录)这些路径。 - 在csh中设置两个关键环境变量:
如果你的系统是64位,库目录可能是# 指定terminfo目录(注意是目录,不是.db文件) setenv TERMINFO $HOME/share/terminfo # 让系统优先加载你编译的ncurses库 setenv LD_LIBRARY_PATH $HOME/lib:$LD_LIBRARY_PATH$HOME/lib64,可以根据实际情况调整。 - 现在再运行测试程序,应该就能正常工作了。
方法2:编译时直接指定使用系统的terminfo数据库
如果你不想安装到主目录,也可以在configure阶段就告诉ncurses使用系统已有的terminfo.db,重新编译:
- 先清理之前的编译文件:
make clean && make distclean - 重新执行configure,加上指定terminfo数据库的参数:
./configure --prefix=$HOME --with-terminfo-db=/usr/local/share/misc/terminfo.db - 重新编译:
这次编译出来的测试程序会直接调用系统的terminfo数据库,不需要额外设置makeTERMINFO变量。
额外检查点
- 确认你的
TERM环境变量是xterm:执行echo $TERM,如果不是的话用setenv TERM xterm设置,因为报错里明确提示找不到xterm终端类型。 - 如果你之前用pkg安装的ncurses还在,设置
LD_LIBRARY_PATH能确保测试程序调用的是你自己编译的版本,而非系统/pkg的版本。
内容的提问来源于stack exchange,提问作者varro
相关产品推荐
相关产品推荐

