【问题标题】:ncurses on adb shell androidadb shell android上的ncurses
【发布时间】:2021-08-06 02:36:49
【问题描述】:

我正在尝试在 Android 上使用 ncurses 创建一个简约的命令行 gui。我为 ARM64 等交叉编译了 ncurses,一切似乎都在运行。然而;在 adb shell 中启动我的测试“hello world”ncurses 程序时,出现以下错误:

Error opening terminal: xterm-256color.

当我尝试将 TERM 设置为 xterm 或我得到的东西时:

Error opening terminal: xterm.

我需要编译 ncurses 和/或配置 Android 以允许运行这样的 CLI gui 吗?

【问题讨论】:

  • 检查您的环境变量:TERM=xtermTERMINFO=/path/to/terminfo
  • 我将术语设置为 xterm,仍然出现类似的错误消息。我猜 Android 上没有 terminfo?
  • ncurses 包中有一个名为 terminfo 的文件夹。或者你必须生成那个东西,不知道不记得。如果你有一个 linux 操作系统,这个文件夹通常位于/usr/share/terminfo。层次结构应如下所示:terminfo --> a d e l n p r s t v x 在 x 文件夹内,有一堆以xterm 开头的文件,例如xtermxterm-16colorxterm+256colorxterm-color
  • 不,Android 模拟器上不存在 terminfo

标签: android c shell terminal ncurses


【解决方案1】:

您需要一个终端数据库来运行 curses 应用程序。显然没有安装(尽管可能存在一个终端数据库,其位置与 TERMINFOTERMINFO_DIRS 的编译默认值不对应)。

使用 ncurses,您可以配置和编译回退条目(在 INSTALL 源文件中讨论),如果在终端数据库中找不到终端描述,则使用这些条目:

为了支持在terminfo之前运行ncurses程序 树是可访问的(即,在单用户模式下或在操作系统安装时 time) 可以编译 ncurses 库以包含一个数组 预取的后备条目。

注意:这必须在具有 ncurses 的 infocmp 和 安装了 terminfo 数据库(以及 ncurses 的 tic 和 infocmp 程式)。这是因为生成了后备源并且 在构建树的 infocmp 副本之前编译到库中 可用的。

这些条目由 setupterm() 检查仅当常规 从 terminfo 树和 termcap 回退中获取(如果已配置) 已经尝试过并且失败了。因此,后备的存在不会 对相同类型的磁盘条目的影子修改,当 入口是可访问的。

【讨论】:

  • 所以如果这些后备条目不在系统上,它仍然可以使用它们吗?它会在编译期间将这些后备条目构建到自身中吗?
  • 条目必须在编译后备条目的机器上可用。
【解决方案2】:

所以诀窍是像这样配置 ncurses:

./configure --without-database --with-fallbacks=xterm-256color,vt100 --without-xterm-new --disable-home-terminfo --with-termlib --enable-termcap --disable-database --host=arm-linux-gnue

这允许在内部使用后备而不依赖库

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2012-08-10
    • 1970-01-01
    • 2014-08-11
    • 2021-11-06
    • 2014-02-21
    相关资源
    最近更新 更多