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

Mic*_*elB 5 perl perlbrew plenv

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

因此,典型的perl编译失败.如果我想编译,我需要做:

echo "dont_use_nlink='define'" >> Policy.sh
./Configure -des
make
make install
Run Code Online (Sandbox Code Playgroud)

我理想的是能够使用perlbrewplenv管理我的perls并将dont_use_nlink参数传递给我构建的任何perl.有没有办法做到这一点?

cof*_*ode 2

幸运的是,看起来Win10 WSL 中的根本问题已经得到解决,并且(希望)很快就会发布。

正如 MichielB 指出的那样,-A 或 -D 似乎应该完成此任务,但从我的一些测试来看,perl 的配置不支持-A或传递-D参数-de(请参阅perl 的元配置中的“用法”了解以下内容的重要性)这些参数)。尽管在生成的 config.sh 的参数列表中清楚地看到格式正确的 -A 和 -D 标志,但 dont_use_nlink 永远不会被添加。

事实上,perlbrew 会将这些设置作为默认值,除非您使用特殊的PERLBREW_CONFIGURE_FLAGS环境变量

不过,有一个解决方法。你可以使用PERLBREW_CONFIGURE_FLAGSuse-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 版本 14393 上的大部分干净的 WSL 上为我进行了编译,并且几乎所有测试都通过了(其余的看起来像是已经提交了 WSL 错误的东西)。