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