5

I have one machine that runs Windows 10 with Bash on Ubuntu on Windows. It uses some kind of FUSE filesystem that has no proper hard link support.

Because of this, a typical perl compilation fails. If I want to compile, I need to do:

echo "dont_use_nlink='define'" >> Policy.sh
./Configure -des
make
make install

What I'd ideally want is to be able to use either perlbrew or plenv to manage my perls and pass the dont_use_nlink parameter to any perl I build. Is there any way to do this?

4

2 回答 2

2

幸运的是, Win10 WSL 中的底层问题看起来已经修复,并且(希望)很快就会发布。

正如 MichielB 指出的那样,-A 或 -D 似乎他们应该做到这一点,但从我的一些测试看来,perl 的配置在也通过时不尊重-A-D参数(请参阅 perl 的元配置中的“用法”以了解那些参数)。尽管在生成的 config.sh 的 args 列表中清楚地看到格式正确的 -A 和 -D 标志,但从未添加 dont_use_nlink。-de

碰巧的是,除非您使用特殊的PERLBREW_CONFIGURE_FLAGS环境变量,否则 perlbrew 会将这些作为默认值传递。

但是,有一种解决方法。你可以使用PERLBREW_CONFIGURE_FLAGSto-f来传递我们自己的配置文件。我们可以使用由失败的“perlbrew install”运行生成的最正确的 config.sh,然后对其进行调整并传递它。

脚步:

  1. 运行将失败的 perlbrew 安装,例如:

perlbrew install perl-5.24.0

  1. 将生成的 config.sh 文件复制到某处以进行修改和重用:

cp /home/USERNAME/perl5/perlbrew/build/perl-5.24.0/config.sh ~/config_dont_use_nlink.sh

  1. 编辑文件并插入dont_use_nlink='define'. 如果您要整理并按字母顺序归档,它将在 dlsrc 和 doubleinfbytes 之间进行:

dlsrc='dl_dlopen.xs' dont_use_nlink='define' doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f'

  1. 运行 perlbrew install,但设置一个环境变量,将“-f”传递给新的 perl 的配置脚本:

PERLBREW_CONFIGURE_FLAGS="-de -f /home/USERNAME/config_dont_use_nlink.sh" perlbrew install perl-5.24.0

这在 Win10 build 14393 上为我编译了一个大部分干净的 WSL,并且几乎所有测试都通过了(其余的看起来像是已经提交了 WSL 错误的东西)。

于 2017-01-08T07:55:16.310 回答
1

我没有看过 Windows 10 或新的 Windows bash shell,所以我不知道新的 Windows bash 环境与 perlbrew 或 pleenv 的兼容性如何。

另一种方法是利用便携式Strawberry Perl的版本。不久前,David Farrell 使用可移植的 Strawberry Perl 编写 berrybrew 来模仿 Windows 上的 perlbrew,而不是从源代码编译 Perl。他写了一篇关于它的博客文章,并将他的东西放到了 GitHub ( berrybrew ) 上。后来,Steve Bertrand 想添加更多功能,最终分叉了这个项目。你可以在他的博客文章中阅读更多关于它的信息,他的分叉项目在 GitHub 上(见这里)。

除非您需要/想要从源代码构建 Perl 版本,否则使用 berrybrew 可能会为您提供您正在寻找的功能。

于 2016-09-27T19:42:41.313 回答