我怎样才能弄清楚为什么 Linenoise 安装失败?
How can I figure out why Linenoise is failing to install?
这是 64 位 Windows 10 Pro 和 MSVC 2015。这个问题很长,因为我想预先提供完整的信息,但实际问题相当简单:
如何让 panda
在安装失败后保留工作目录(就像 cpanm
那样),以便我可以诊断出了什么问题?
从下面的日志可以看出,linenoise.dll
似乎是在正确的地方创建的,但是到了安装的时候,却找不到了。
%TEMP%
中的.panda-work
目录不见了。
我刚刚通过
从源代码构建了 Rakudo
git clone git://github.com/rakudo/rakudo.git
cd rakudo
set CFLAGS=/O2 /favor:INTEL64 /Qpar
perl Configure.pl --gen-moar --gen-nqp --backends=moar --prefix=c:/opt/perl6
nmake test
nmake install
nmake spectest
← 自从我上次尝试以来失败的次数增加了,但这与我的问题无关
然后我通过以下方式安装了 panda
:
git clone --recursive git://github.com/tadzik/panda.git
cd panda
perl6 bootstrap.pl
有效。
然后我做了
panda install Task::Star
我测试失败:
==> Building NativeHelpers::Blob
==> Testing NativeHelpers::Blob
t/00-trivial.t ..
Dubious, test returned 5 (wstat 1280, 0x500)
Failed 1/1 subtests
但我强制安装了它,因为我想尽快完成安装。
所以,奋发向上,我命中了这个:
C:\Users\...\Temp> panda install Linenoise
==> Fetching Linenoise
==> Building Linenoise
Microsoft (R) Program Maintenance Utility Version 14.00.24210.0
Copyright (C) Microsoft Corporation. All rights reserved.
cl -c /nologo /MT /Ox /GL /DNDEBUG /DWIN32 /DAO_ASSUME_WINDOWS98 /O2 /favor:INTEL64 /Qpar /Folinenoise.obj linenoise.c
linenoise.c
perl6 -e "mkdir 'resources'; mkdir 'resources/libraries'"
link /dll /nologo /LTCG shell32.lib ws2_32.lib mswsock.lib rpcrt4.lib advapi32.lib psapi.lib iphlpapi.lib userenv.lib /out:resources/libraries/libline
noise.dll linenoise.obj
Generating code
Finished generating code
cl /Foconstant-helper /nologo /MT /Ox /GL /DNDEBUG /DWIN32 /DAO_ASSUME_WINDOWS98 /O2 /favor:INTEL64 /Qpar constant-helper.c
constant-helper.c
Generating code
Finished generating code
perl6 fill-constants.pl lib/Linenoise.pm
==> Testing Linenoise
==> Installing Linenoise
Failed to open file C:\Users\...\Temp\.panda-work83278033_1\resources\libraries\linenoise.dll: no such file or directory
in any at C:\opt\perl6/share/perl6/runtime/CORE.setting.moarvm line 1
in block at C:\opt\perl6\share\perl6\site\sources367160D11E565B2D089507C79BC309215430D6 (Panda::Installer) line 61
in sub indir at C:\opt\perl6\share\perl6\site\sources811C576EF8F85E7672B26955C802BB2FC94675 (Panda::Common) line 20
in method install at C:\opt\perl6\share\perl6\site\sources367160D11E565B2D089507C79BC309215430D6 (Panda::Installer) line 42
in method install at C:\opt\perl6\share\perl6\site\sources2CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 190
in method resolve at C:\opt\perl6\share\perl6\site\sources2CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 263
in sub MAIN at C:\opt\perl6\share\perl6\site\resourcesC71F7B377C6F2C6C4707E3C25016AA25A2926B1 line 20
in block at C:\opt\perl6\share\perl6\site\resourcesC71F7B377C6F2C6C4707E3C25016AA25A2926B1 line 165
Actually thrown at:
in method throw at C:\opt\perl6/share/perl6/runtime/CORE.setting.moarvm line 1
in any at gen/moar/Metamodel.nqp line 3072
in block at C:\opt\perl6\share\perl6\site\sources367160D11E565B2D089507C79BC309215430D6 (Panda::Installer) line 61
in sub indir at C:\opt\perl6\share\perl6\site\sources811C576EF8F85E7672B26955C802BB2FC94675 (Panda::Common) line 20
in method install at C:\opt\perl6\share\perl6\site\sources367160D11E565B2D089507C79BC309215430D6 (Panda::Installer) line 42
in method install at C:\opt\perl6\share\perl6\site\sources2CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 190
in method resolve at C:\opt\perl6\share\perl6\site\sources2CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 263
in sub MAIN at C:\opt\perl6\share\perl6\site\resourcesC71F7B377C6F2C6C4707E3C25016AA25A2926B1 line 20
in block at C:\opt\perl6\share\perl6\site\resourcesC71F7B377C6F2C6C4707E3C25016AA25A2926B1 line 165
Linenoise 的 Build.pm 文件根本没有正确写入。他们将 'lib' 前缀硬编码到库名称,同时也在另一部分尝试使用平台库名称猜测机制。如果它想使用 $*VM.platform-library-name
那么它需要生成一个名为 linenoise.dll
的文件, not liblinenoise.dll
我也不确定 Linenoise 在 windows 上是否有效,即使它 确实 安装了。
您可能应该使用 zef
而不是 panda
。如果是,您可以查看 ~/.zef/store/p6-linenoise.git
处使用的工作目录
这是 64 位 Windows 10 Pro 和 MSVC 2015。这个问题很长,因为我想预先提供完整的信息,但实际问题相当简单:
如何让 panda
在安装失败后保留工作目录(就像 cpanm
那样),以便我可以诊断出了什么问题?
从下面的日志可以看出,linenoise.dll
似乎是在正确的地方创建的,但是到了安装的时候,却找不到了。
%TEMP%
中的.panda-work
目录不见了。
我刚刚通过
从源代码构建了 Rakudogit clone git://github.com/rakudo/rakudo.git
cd rakudo
set CFLAGS=/O2 /favor:INTEL64 /Qpar
perl Configure.pl --gen-moar --gen-nqp --backends=moar --prefix=c:/opt/perl6
nmake test
nmake install
nmake spectest
← 自从我上次尝试以来失败的次数增加了,但这与我的问题无关
然后我通过以下方式安装了 panda
:
git clone --recursive git://github.com/tadzik/panda.git
cd panda
perl6 bootstrap.pl
有效。
然后我做了
panda install Task::Star
我测试失败:
==> Building NativeHelpers::Blob ==> Testing NativeHelpers::Blob t/00-trivial.t .. Dubious, test returned 5 (wstat 1280, 0x500) Failed 1/1 subtests
但我强制安装了它,因为我想尽快完成安装。
所以,奋发向上,我命中了这个:
C:\Users\...\Temp> panda install Linenoise ==> Fetching Linenoise ==> Building Linenoise Microsoft (R) Program Maintenance Utility Version 14.00.24210.0 Copyright (C) Microsoft Corporation. All rights reserved. cl -c /nologo /MT /Ox /GL /DNDEBUG /DWIN32 /DAO_ASSUME_WINDOWS98 /O2 /favor:INTEL64 /Qpar /Folinenoise.obj linenoise.c linenoise.c perl6 -e "mkdir 'resources'; mkdir 'resources/libraries'" link /dll /nologo /LTCG shell32.lib ws2_32.lib mswsock.lib rpcrt4.lib advapi32.lib psapi.lib iphlpapi.lib userenv.lib /out:resources/libraries/libline noise.dll linenoise.obj Generating code Finished generating code cl /Foconstant-helper /nologo /MT /Ox /GL /DNDEBUG /DWIN32 /DAO_ASSUME_WINDOWS98 /O2 /favor:INTEL64 /Qpar constant-helper.c constant-helper.c Generating code Finished generating code perl6 fill-constants.pl lib/Linenoise.pm ==> Testing Linenoise ==> Installing Linenoise Failed to open file C:\Users\...\Temp\.panda-work83278033_1\resources\libraries\linenoise.dll: no such file or directory in any at C:\opt\perl6/share/perl6/runtime/CORE.setting.moarvm line 1 in block at C:\opt\perl6\share\perl6\site\sources367160D11E565B2D089507C79BC309215430D6 (Panda::Installer) line 61 in sub indir at C:\opt\perl6\share\perl6\site\sources811C576EF8F85E7672B26955C802BB2FC94675 (Panda::Common) line 20 in method install at C:\opt\perl6\share\perl6\site\sources367160D11E565B2D089507C79BC309215430D6 (Panda::Installer) line 42 in method install at C:\opt\perl6\share\perl6\site\sources2CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 190 in method resolve at C:\opt\perl6\share\perl6\site\sources2CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 263 in sub MAIN at C:\opt\perl6\share\perl6\site\resourcesC71F7B377C6F2C6C4707E3C25016AA25A2926B1 line 20 in block at C:\opt\perl6\share\perl6\site\resourcesC71F7B377C6F2C6C4707E3C25016AA25A2926B1 line 165 Actually thrown at: in method throw at C:\opt\perl6/share/perl6/runtime/CORE.setting.moarvm line 1 in any at gen/moar/Metamodel.nqp line 3072 in block at C:\opt\perl6\share\perl6\site\sources367160D11E565B2D089507C79BC309215430D6 (Panda::Installer) line 61 in sub indir at C:\opt\perl6\share\perl6\site\sources811C576EF8F85E7672B26955C802BB2FC94675 (Panda::Common) line 20 in method install at C:\opt\perl6\share\perl6\site\sources367160D11E565B2D089507C79BC309215430D6 (Panda::Installer) line 42 in method install at C:\opt\perl6\share\perl6\site\sources2CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 190 in method resolve at C:\opt\perl6\share\perl6\site\sources2CB7486602954A4601BDCE5A0EAC54B05DA58A (Panda) line 263 in sub MAIN at C:\opt\perl6\share\perl6\site\resourcesC71F7B377C6F2C6C4707E3C25016AA25A2926B1 line 20 in block at C:\opt\perl6\share\perl6\site\resourcesC71F7B377C6F2C6C4707E3C25016AA25A2926B1 line 165
Linenoise 的 Build.pm 文件根本没有正确写入。他们将 'lib' 前缀硬编码到库名称,同时也在另一部分尝试使用平台库名称猜测机制。如果它想使用 $*VM.platform-library-name
那么它需要生成一个名为 linenoise.dll
的文件, not liblinenoise.dll
我也不确定 Linenoise 在 windows 上是否有效,即使它 确实 安装了。
您可能应该使用 zef
而不是 panda
。如果是,您可以查看 ~/.zef/store/p6-linenoise.git