如何使用 plenv 或 perlbrew 将编译选项传递给 perl

How to pass compile options to perl using plenv or perlbrew

我有一台机器在 Windows 上运行 Windows 10,在 Ubuntu 上运行 Bash。它使用某种没有适当硬 link 支持的 FUSE 文件系统。

正因如此,一个典型的perl compilation fails。如果我想编译,我需要做:

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

我最理想的是能够使用 perlbrewplenv 来管理我的 perls 并将 dont_use_nlink 参数传递给我构建的任何 perl。有什么办法吗?

我还没有看过 Windows 10 或 Windows 的新 bash shell,所以我不知道新 [=18] 的兼容性如何=] bash 环境使用 perlbrew 或 plenv。

另一种方法是利用便携式版本 Strawberry Perl. A while back, David Farrell wrote berrybrew to mimic perlbrew on Windows using portable Strawberry Perl rather than compiling Perl from source code. He wrote a blog post about it and put his stuff out on GitHub (berrybrew). Later, Steve Bertrand wanted to add more functionality and eventually ended up forking the project. You can read more about it on his blog post and his forked project is out on GitHub (see here)。

除非您needing/wanting从源代码构建 Perl 版本,否则使用 berrybrew 可能会为您提供所需的功能。

幸运的是,它看起来像 underlying issue in Win10 WSL is fixed,并且将(希望)很快发布。

正如 MichielB 指出的那样,-A 或 -D 似乎应该实现这一点,但从我的一些测试来看,perl 的 Configure doesn't honor -A or -D arguments when -de is also passed (see "usage" in perl's metaconfig 似乎对这些参数的重要性)。尽管在生成的 config.sh 的 args 列表中清楚地看到格式正确的 -A 和 -D 标志,但从未添加 dont_use_nlink。

碰巧,除非您使用 special PERLBREW_CONFIGURE_FLAGS environment variable.

,否则 perlbrew 会将它们作为默认值传递

但是,有一个解决方法。可以使用PERLBREW_CONFIGURE_FLAGS使用-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 安装,但设置一个环境变量,使“-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 错误的东西)。