无法使用Rakudo Perl 6 zef安装Readline

时间:2018-01-02 19:13:46

标签: perl6 rakudo rakudo-star 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

2 个答案:

答案 0 :(得分:5)

许多发行版,包括debian / ubuntu和朋友鼓励在包装之间进行某种分离,在debian.org packaging docs中提供更多信息。

特别是,他们鼓励为某些版本(例如.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

Perl 6 NativeCall文档也讨论过这个问题:

  

如果您编写本机('foo'),NativeCall将在Unix下搜索libfoo.so   喜欢系统(OS X上的libfoo.dynlib,win32上的foo.dll)。在大多数现代   系统它将要求您或您的模块的用户安装   开发包因为建议始终提供   API / ABI版本到共享库,所以libfoo.so经常结束   仅由开发包提供的符号链接。

     

为避免这种情况,本机特征允许您指定API / ABI   版。它可以是完整版本,也可以只是其中的一部分。 (试着坚持下去   对于主要版本,一些BSD代码不关心Minor。)

它看起来像Readline does not specify a specific API/ABI version。 (也许它应该?)

因为它没有,它将寻找未版本化的共享库(普通.so)。

答案 1 :(得分:3)

请参阅this perl6-readline issue

在@drforr有时间整理版本之前,我创建了一个临时的分支,可以在Ubuntu 18.04以及使用libreadline版本7的所有发行版上安装。

安装模块:

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

如果您想自行修补此问题(1行补丁),您可以按照my comment on a related issue中的说明操作。