Cygwin Perl 将不再加载 DLL,可能是由于无法将 cygwin 路径转换为 Windows 路径

问题描述 投票:0回答:1

我突然无法在 Cygwin 下运行任何 Perl 脚本。 我尝试运行的每个脚本都会像这样崩溃:

phil@TAICHI /cygdrive/h/bakE/new/virChecked
$ findFiles -s . -t /cygdrive/D/data-comp/text -u /cygdrive/E/new/virChecked/text -d -a .3
Can't load '/home/phil/perl5/lib/perl5/x86_64-cygwin-threads-multi/auto/Win32/File/File.dll' for module Win32::File: No such file or directory at /usr/lib/perl5/5.36/x86_64-cygwin-threads/DynaLoader.pm line 206.
 at /usr/local/bin/findFiles line 24.
Compilation failed in require at /usr/local/bin/findFiles line 24.
BEGIN failed--compilation aborted at /usr/local/bin/findFiles line 24.

phil@TAICHI /cygdrive/h/bakE/new/virChecked
$ pushd /home/phil/perl5/lib/perl5/x86_64-cygwin-threads-multi/auto/Win32/File/
~/perl5/lib/perl5/x86_64-cygwin-threads-multi/auto/Win32/File /cygdrive/h/bakE/new/virChecked

phil@TAICHI ~/perl5/lib/perl5/x86_64-cygwin-threads-multi/auto/Win32/File
$ ls -l File.dll
-r-xr-xr-x 1 phil None 178K Jul 14  2021 File.dll*

有时perl无法打开File.dll;有时它无法打开IO.dll。 无论哪种情况,DLL 总是准确地位于 Perl 正在寻找的位置,具有全局读取权限;但 Perl 不会加载它。

Dynaloader.pm 的第 206 行是

my $libref = dl_load_file($file, $flags) or croak("Can't load '$file' for module $module: ".dl_error());

Dynaloader 开头附近的一条评论说:

The load function that dl_load_file() calls may require an absolute pathname.

我找不到 dl_load_file() 的定义位置。 它不在 Dynaloader.pm 中; Dynaloader 唯一包含的模块是 Config,它也没有它,并且不包含其他文件。

我怀疑某些 Perl 模块已更改,导致 dl_load_file 无法将 Cygwin 绝对路径名转换为 Windows 绝对路径名。我尝试重新安装 Perl 5.36.3-1,但没有帮助。 我还进行了新的 Cygwin 安装并安装了 Perl 5.40,但它的行为方式相同。

问题:

  • 目前还有其他人能够使用最新的 Cygwin 软件包在 Cygwin 中使用 Perl 吗?
  • 知道最近发生了什么变化导致 Cygwin Perl 无法使用完整的 Cygwin 路径吗?
  • 在哪里可以找到 Perl 5.32 之前的 Cygwin perl 发行版?

POSTSCRIPT 于 10 月 13 日添加:我收到了很多评论,但还没有人回答他们当前是否有 Cygwin Perl 的工作版本这一简单问题。 如果您有最新的 Cygwin Perl 仍然可以工作,请说出来。

perl dll cygwin
1个回答
0
投票

我做了一个新的 cygwin 安装只是为了使用 Perl,并且没有安装 Perl,也没有安装任何包含 Perl 的东西(这是限制性的并且极其乏味)。 然后我在 Cygwin 之外的系统上安装了 Strawberry Perl。 我不必设置任何环境变量。 如果不存在其他 Perl,Cygwin 会自动检测并使用 Strawberry Perl。 我可能会将 Strawberry Perl 放在 PATH 的前面,这样我就不再需要在每次更新 cygwin 时检查自动包含列表,以确保没有任何内容依赖于 Perl(因此将安装 Cygwin perl。)

© www.soinside.com 2019 - 2024. All rights reserved.