Ошибка открытия терминала: vt100. при запуске двоичного файла с ncurses на ARM

Я кросс-компилировал ncurses для ARM. Написал пример приложения со ссылкой на него. При попытке запустить двоичный файл на ARM я получаю эту ошибку.

Ошибка открытия терминала: vt100.

Похоже, мне не хватает какой-то установки terminfo, но я не совсем уверен, как это сделать. Может ли кто-нибудь помочь мне с этим?

Это команда ./configure — -caps --disable-база данных --with-fallbacks --без-xterm-new

** Сводка конфигурации для NCURSES 6.1 20180127:

   extended funcs: yes
   xterm terminfo: xterm-old

    bin directory: /ncurses-6.1/arm64//bin
    lib directory: /ncurses-6.1/arm64//lib
include directory: /ncurses-6.1/arm64//include/ncurses
    man directory: /ncurses-6.1/arm64//share/man

** Include-каталог находится не в стандартном месте. После этого я делаю make, упаковываю следующее и загружаю его на плату ARM. ncurses-6.1/lib/* /usr/share/terminfo/*

Заранее спасибо.

С уважением, Сай


person user1912491    schedule 15.11.2018    source источник


Ответы (1)


Файл INSTALL в Источник ncurses сообщает, что вам нужно знать:

--disable-database                                                          
    Use only built-in data.  The ncurses libraries normally read terminfo   
    and termcap data from disk.  You can configure ncurses to have a        
    built-in database, aka "fallback" entries.  Embedded applications may   
    have no need for an external database.  Some, but not all of the        
    programs are useful in this configuration, e.g., reset and tput versus  
    infocmp and tic.  

--with-fallbacks=XXX                                                        
    Specify a list of fallback terminal descriptions which will be          
    compiled into the ncurses library.  See CONFIGURING FALLBACK ENTRIES.

Команда, указанная в вопросе, не содержит описаний резервных терминалов (например, vt100).

В команде должны быть перечислены описания, которые вы хотите добавить в библиотеку, например,

./configure command - ./configure --host arm64-linux-gnu --prefix=/sw/nic/third-party/ncurses-6.1/arm64/ -with-termlib --enable-termcap --with-caps --disable-database --with-fallbacks=vt100 --without-xterm-new

Поскольку вы отключили базу данных, нет смысла копировать /usr/share/terminfo/*, а поскольку при этом используется (по умолчанию) статическая библиотека, нет необходимости копировать libncursesw.a во встроенную систему (за исключением редкого случая, когда вы фактически используете набор инструментов компилятора/компоновщика, работающий на машине arm64).

...отвечая на сообщение от 18 ноября: резервная поддержка в библиотеке ncurses используется только в случае, когда setupterm вызывается (или его вызывающие newterm, initscr) см. исходный код< /а>. Например, такие программы, как clear, будут работать, но не infocmp.

Для быстрой проверки я запустил это, чтобы создать тестовую копию, включив функцию трассировки ncurses:

#!/bin/sh
unset TERM
unset TERMINFO
unset TERMINFO_DIRS
./configure \
        --prefix=/tmp/FOO \
        --enable-termcap \
        --with-trace \
        --without-debug \
        --without-ada \
        --with-fallbacks=vt100,vt102,screen
make

а потом в ./проги

#!/bin/sh
export TERM=vt100
unset TERMINFO
unset TERMINFO_DIRS
rm -f trace  
export NCURSES_TRACE=0xffff
./clear

(выполнение unset, чтобы не подбирать мое окружение). Файл трассировки не сообщает, откуда берется результирующее описание. Это делается до вызова set_curterm. Если бы это было прочитано из файла, это бы появилось. Но команда clear работает. Вот полная трассировка, показывающая неудачные вызовы для доступа к файлу и, наконец, вызов tputs с ожидаемыми данными:

TRACING NCURSES version 6.1.20181117 (tracelevel=0xffff)
called {setupterm("vt100",0,(nil))
your terminal name is vt100
using 2048 for getstr limit
+ called {_nc_first_db
duplicate /tmp/FOO/share/terminfo
not found /users/tom/.terminfo
not found /tmp/FOO/share/terminfo
not found /etc/termcap
not found /usr/share/misc/termcap
+ return }
+ called {set_curterm(0x242a2a0)
+ return }(nil)
+ called {def_shell_mode((nil)) ->term 0x242a2a0
_nc_get_tty_mode(0): iflags: {BRKINT, IXON} cflags: {CREAD} CS8 lflags: {ISIG}
+ return }0
+ called {def_prog_mode((nil)) ->term 0x242a2a0
_nc_get_tty_mode(0): iflags: {BRKINT, IXON} cflags: {CREAD} CS8 lflags: {ISIG}  
+ return }0
+ called {baudrate((nil))
+ return }38400
screen size: terminfo lines = 24 columns = 80
SYS screen size: environment LINES = 40 COLUMNS = 80
screen size is 40x80
TABSIZE = 8
return }0
tputs( = "\e[H\e[J$<50>", 40, 0x403630) called
called {delay_output(0x7ffca32a2f50,50)
return }0
called {tigetstr((nil), E3)
return }(cancelled)
tputs((cancelled), 40, 0x403630) called

Запуск strings на clear показывает следующее:

vt100|vt100-am|dec vt100 (w/advanced video)

это полная строка из исходного файла terminfo.

person Thomas Dickey    schedule 15.11.2018
comment
Спасибо, Томас. После этого. Достаточно ли, если я возьму ncurses/lib/*a на свою плату ARM? Или я должен скопировать и некоторые другие файлы? Спасибо. - person user1912491; 16.11.2018
comment
Файл .a представляет собой статическую библиотеку, которую вы, вероятно, уже связали со своим приложением (в этом случае нет необходимости в библиотеке встроенной системы). - person Thomas Dickey; 16.11.2018
comment
Большое спасибо, Томас. Я пробовал с --with-fallbacks=vt100,vt102,screen. Я все еще вижу ошибку. - person user1912491; 18.11.2018
comment
Я пробовал с --enable-database, но тщетно. Есть ли способ проверить, скомпилирована ли поддержка резервного варианта в файле .bin или .a, используя для них команду nm или string? Я подозреваю, что эта часть как-то терпит неудачу. - person user1912491; 18.11.2018
comment
Вы можете запустить strings для связанного исполняемого файла и увидеть скомпилированное имя для резервной таблицы. Текущая трассировка отладки не показывает эту деталь, но я добавил пример, чтобы показать, как я проверил то, что есть сегодня. - person Thomas Dickey; 18.11.2018
comment
На самом деле $TERMINFO был отключен, и установка его в /usr/share/terminfo решила эту проблему. Я так понимаю, это решение? - person user1912491; 19.11.2018
comment
нет - если вы настроите трассировку (--with-trace), вы увидите, что программа нашла описание в файле, а не в резервной копии. Я бы проверил, правильно ли скомпилирован резервный вариант... - person Thomas Dickey; 19.11.2018