Не удается установить Readline с Rakudo Perl 6 zef

Пытаюсь установить Readline.

(Система - Linux Mint Mate 18.3, то же самое и для Lubuntu 17.10).

$ zef install Readline

Процесс установки начинается, но позже прерывается со следующими сообщениями:

===> Searching for: Readline
===> Searching for missing dependencies: LibraryCheck
===> Testing: LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe>
===> Testing [OK] for LibraryCheck:ver<0.0.6>:auth<github:jonathanstowe>
===> Testing: Readline:ver<0.0.2>:auth<github:drforr>
# Failed test 'initialize'
# at t/02-base.t line 10
# Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'macro-dumper lives'
    # at t/02-base.t line 18
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 1 test of 1
# Failed test 'dumpers'
# at t/02-base.t line 13
    # Failed test 'set-prompt lives'
    # at t/02-base.t line 27
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'expand-prompt lives'
    # at t/02-base.t line 29
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'on-new-line-with-prompt lives'
    # at t/02-base.t line 31
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'save-prompt lives'
    # at t/02-base.t line 33
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'restore-prompt lives'
    # at t/02-base.t line 35
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 5 tests of 5
# Failed test 'prompt'
# at t/02-base.t line 24
    # Failed test 'tilde-expand lives'
    # at t/02-base.t line 46
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'tilde-expand-word lives'
    # at t/02-base.t line 48
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 2 tests of 2
# Failed test 'tilde'
# at t/02-base.t line 39
    # Failed test 'prep-terminal lives'
    # at t/02-base.t line 58
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'deprep-terminal lives'
    # at t/02-base.t line 60
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'reset-terminal'
    # at t/02-base.t line 62
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 3 tests of 3
# Failed test 'terminal'
# at t/02-base.t line 54
    # Failed test 'reset-line-state lives'
    # at t/02-base.t line 70
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 1 test of 1
# Failed test 'state'
# at t/02-base.t line 68
    # Failed test 'free-undo-list lives'
    # at t/02-base.t line 81
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'do-undo lives'
    # at t/02-base.t line 83
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'begin-undo-group lives'
    # at t/02-base.t line 85
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'end-undo-group lives'
    # at t/02-base.t line 87
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 4 tests of 4
# Failed test 'undo'
# at t/02-base.t line 80
    # Failed test 'funmap-names lives'
    # at t/02-base.t line 99
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 1 test of 1
# Failed test 'funmap'
# at t/02-base.t line 91
    # Failed test 'set-screen-size'
    # at t/02-base.t line 106
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'reset-screen-size lives'
    # at t/02-base.t line 110
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 2 tests of 2
# Failed test 'screen'
# at t/02-base.t line 103
    # Failed test 'insert-text lives'
    # at t/02-base.t line 118
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'delete-text lives'
    # at t/02-base.t line 120
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'kill-text lives'
    # at t/02-base.t line 122
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'copy-text lives'
    # at t/02-base.t line 124
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Looks like you failed 4 tests of 4
# Failed test 'text'
# at t/02-base.t line 114
    # Failed test 'make-bare-keymap lives'
    # at t/02-base.t line 132
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'copy-keymap lives'
    # at t/02-base.t line 134
    # Type check failed in binding to parameter '$map'; expected Readline::Keymap but got Any (Any)
    # Failed test 'make-keymap lives'
    # at t/02-base.t line 136
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'discard-keymap lives'
    # at t/02-base.t line 138
    # Type check failed in binding to parameter '$map'; expected Readline::Keymap but got Any (Any)
    # Failed test 'get-keymap-by-name lives'
    # at t/02-base.t line 145
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'get-keymap lives'
    # at t/02-base.t line 147
    # Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
    # Failed test 'get-keymap-name lives'
    # at t/02-base.t line 149
    # Type check failed in binding to parameter '$map'; expected Readline::Keymap but got Any (Any)
    # Failed test 'set-keymap lives'
    # at t/02-base.t line 151
    # Type check failed in binding to parameter '$map'; expected Readline::Keymap but got Any (Any)
    # Looks like you failed 8 tests of 8
# Failed test 'keymap'
# at t/02-base.t line 128
Cannot locate native library 'libreadline.so': libreadline.so: cannot open shared object file: No such file or directory
  in method setup at /opt/rakudo-pkg/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 289
  in method CALL-ME at /opt/rakudo-pkg/share/perl6/sources/24DD121B5B4774C04A7084827BFAD92199756E03 (NativeCall) line 576
  in method make-bare-keymap at /home/evb/.zef/store/perl6-readline.git/e2cf431a87c36d420a3f2737b2cbc160efeb9233/lib/Readline.pm (Readline) line 1040
  in sub  at t/02-base.t line 162
  in sub subtest at /opt/rakudo-pkg/share/perl6/sources/C712FE6969F786C9380D643DF17E85D06868219E (Test) line 411
  in sub  at t/02-base.t line 161
  in sub subtest at /opt/rakudo-pkg/share/perl6/sources/C712FE6969F786C9380D643DF17E85D06868219E (Test) line 411
  in block <unit> at t/02-base.t line 155

===> Testing [FAIL]: Readline:ver<0.0.2>:auth<github:drforr>
Aborting due to test failure: Readline:ver<0.0.2>:auth<github:drforr> (use --force-test to override)
  in code  at /home/evb/.perl6/sources/0061125F96D1E60B6E3B0001A4CB4D4188DF4869 (Zef::Client) line 375
  in method test at /home/evb/.perl6/sources/0061125F96D1E60B6E3B0001A4CB4D4188DF4869 (Zef::Client) line 353
  in code  at /home/evb/.perl6/sources/0061125F96D1E60B6E3B0001A4CB4D4188DF4869 (Zef::Client) line 530
  in sub  at /home/evb/.perl6/sources/0061125F96D1E60B6E3B0001A4CB4D4188DF4869 (Zef::Client) line 527
  in method install at /home/evb/.perl6/sources/0061125F96D1E60B6E3B0001A4CB4D4188DF4869 (Zef::Client) line 633
  in sub MAIN at /home/evb/.perl6/sources/C360CEB3AF792C33F65155FA82FDB7AB4467EC82 (Zef::CLI) line 152
  in block <unit> at bin/zef line 3

locate libreadline.so дает следующий результат:

/lib/x86_64-linux-gnu/libreadline.so.5
/lib/x86_64-linux-gnu/libreadline.so.5.2
/lib/x86_64-linux-gnu/libreadline.so.6
/lib/x86_64-linux-gnu/libreadline.so.6.3

person Eugene Barsky    schedule 02.01.2018    source источник
comment
Что вы получаете, когда запускаете locate libreadline.so? У вас есть /usr/lib/libreadline.so и libreadline.so.VERSION? Вы можете добавить эти ответы на свой вопрос? Нам нужно выяснить, почему Readline не может открыть libreadline.so.   -  person piojo    schedule 02.01.2018
comment
@piojo Спасибо. Я добавил вывод в Q. Я попытался установить Readline в другой системе (lubuntu) с тем же результатом.   -  person Eugene Barsky    schedule 02.01.2018
comment
Попробуйте установить libreadline-dev - sudo apt-get install libreadline-dev   -  person Curt Tilmes    schedule 03.01.2018
comment
@CurtTilmes Удачи! Большое тебе спасибо!! Интересно, могли бы вы дать ответ?   -  person Eugene Barsky    schedule 03.01.2018
comment
Проблема не в том, что отсутствуют пакеты (в основном это не -dev), а в том, что p6-Readline не ссылается на конкретную версию библиотеки, а код, который ищет библиотеку, не находит никаких библиотек. Добавление v7 в код загрузки TIB работает без добавления дополнительных пакетов. См. Мой ответ по поводу пропатченного p6-Readline.   -  person nxadm    schedule 18.05.2018


Ответы (2)


Многие дистрибутивы, в том числе debian / ubuntu и другие, поощряют определенное разделение пакетов, дополнительная информация в документы по упаковке debian.org.

В частности, они поощряют распространение разделяемых библиотек для определенных версий (таких как .so.1), которые являются зависимостями других пакетов, отдельно от «неверсированных» .so, которые чаще используются для «разработки» (в пакетах распространения, оканчивающихся на -dev).

Из приведенных выше документов:

Обратите внимание, что пакет разработки должен содержать символическую ссылку на связанную разделяемую библиотеку без номера версии. Например: /usr/lib/x86_64-linux-gnu/libfoo.so -> libfoo.so.1

Для readline эта ссылка находится в пакете libreadline-dev, который можно установить в системах типов mint / ubuntu / debian следующим образом: sudo apt-get install libreadline-dev

Это также обсуждается в NativeCall документах Perl 6:

Если вы напишете native ('foo'), NativeCall будет искать libfoo.so в Unix-подобной системе (libfoo.dynlib в OS X, foo.dll в win32). В большинстве современных систем вам или пользователю вашего модуля потребуется установить пакет разработки, потому что рекомендуется всегда предоставлять версию API / ABI для общей библиотеки, поэтому libfoo.so часто заканчивается символической ссылкой, предоставляемой только разработкой. упаковка.

Чтобы этого избежать, родная черта позволяет вам указать версию API / ABI. Это может быть полная версия или ее часть. (Старайтесь придерживаться основной версии, некоторый код BSD не заботится о Minor.)

Похоже, в Readline не указана конкретная версия API / ABI.. (может быть, должно?)

Поскольку это не так, он будет искать неверсионную разделяемую библиотеку (простой .so).

person Curt Tilmes    schedule 03.01.2018
comment
Я делаю это неправильно в некоторых из моих собственных модулей - я собираюсь добавить к ним версию API / ABI, когда у меня будет возможность. - person Curt Tilmes; 03.01.2018
comment
Похоже, версия изначально присутствовала для строки чтения, но была удалена как часть миграции libreadline v6 - ›v7: github.com/drforr/perl6-readline/issues/12 - person Curt Tilmes; 03.01.2018
comment
Спасибо за решение и объяснения! Я уже использую Readline, который кажется намного удобнее Linenoise. - person Eugene Barsky; 03.01.2018
comment
@EugeneBarsky: не могли бы вы рассказать почему? Подумываю добавить его в контейнеры ракудо. - person nxadm; 10.05.2018
comment
@nxadm Не уверен, что я помню подробности, но когда я делал интерактивную программу, используя линейное редактирование, я вспомнил, что Readline был намного удобнее, чем Linenoise. - person Eugene Barsky; 10.05.2018
comment
@nxadm Я знаю, что было плохого! Linenoise ужасно обращается с символами, отличными от ASCII, поэтому я был (и остаюсь) очень счастлив, когда перешел на Readline. - person Eugene Barsky; 10.05.2018

См. эту проблему perl6-readline.

Пока @drforr не успел разобрать версии, я создал временную вилку, которая отлично устанавливается на Ubuntu 18.04 и во всех дистрибутивах, использующих libreadline версии 7.

Чтобы установить модуль:

$ zef install https://github.com/nxadm/perl6-readline.git

Если вы хотите исправить проблему самостоятельно (однострочный патч), вы можете следовать инструкциям в мой комментарий по связанной проблеме.

person nxadm    schedule 10.05.2018