无法使用Rakudo Perl 6 zef安装Readline

Eug*_*sky 3 rakudo perl6 rakudo-star zef

我正在尝试安装Readline.

(该系统是Linux Mint Mate 18.3,Lubuntu 17.10也是如此).

$ zef install Readline
Run Code Online (Sandbox Code Playgroud)

安装过程开始,但稍后将中止以下消息:

===> 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Cur*_*mes 5

许多发行版,包括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

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

如果你写native('foo'),NativeCall将在Unix下搜索libfoo.so,如系统(OS X上的libfoo.dynlib,win32上的foo.dll).在大多数现代系统中,它将要求您或模块的用户安装开发包,因为建议始终为共享库提供API/ABI版本,因此libfoo.so通常只是由开发提供的符号链接包.

为避免这种情况,本机特征允许您指定API/ABI版本.它可以是完整版本,也可以只是其中的一部分.(尽量坚持使用Major版本,有些BSD代码不关心Minor.)

看起来Readline 没有指定特定的API/ABI版本.(也许应该?)

由于它没有,它将寻找未版本化的共享库(plain .so).

  • 看起来该版本最初是为readline提供的,但是作为libreadline v6 - > v7迁移的一部分被删除:https://github.com/drforr/perl6-readline/issues/12 (2认同)