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

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

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

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

Это команда ./configure - ./configure --host arm64-linux-gnu --prefix = / sw / nic / сторонняя / ncurses-6.1 /arm64 / -with-termlib --enable-termcap --with-caps --disable-database --with-fallbacks --without-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 / *

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

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

1 Ответ

0 голосов
/ 16 ноября 2018

Файл 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 во встроенную систему (за исключением редкого случая, когда вы фактически используете компилятор/ linker toolset работает на машине 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

, а затем в ./progs

#!/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.

...