OpenSSL Perl配置脚本因草莓Perl而失败

时间:2019-02-26 21:18:27

标签: perl makefile

我正在尝试构建OpenSSL,但是我有一个大问题,我无法解决。

我重新安装了VS 2017,perl,strawberry,nasm,但没有任何效果。

%PATH%包含perl路径,nasm路径等。

我在github上发现了相同的问题,但仍然无法解决。 (我的设置是x64)

Screenshot

1 个答案:

答案 0 :(得分:1)

OpenSSL代码中的this line可能是导致您出现问题的原因,因为如果失败,则会触发您的问题中所述的错误消息:

if (`nasm -v 2>NUL` =~ /NASM version ([0-9]+\.[0-9]+)/ && $1 >= 2.0) {

您可以尝试使用以下简化的测试脚本在您的环境中调试此问题:

#!/usr/bin/perl
use warnings;
use strict;

my $output = <<END_OF_STRING;
NASM version 2.14.02 compiled on Dec 26 2018
test
some other junk
END_OF_STRING

if ($output =~ /NASM version ([0-9]+\.[0-9]+)/ && $1 >= 2.0) {
    print "TEST: NASM $1 found\n";
} else {
    die "TEST: NASM not found\n";
}

print "TEST with redirection to NUL: ", `nasm -v 2>NUL`;
print "TEST without redirection to NUL: ", `nasm -v`;

if (`nasm -v 2>NUL` =~ /NASM version ([0-9]+\.[0-9]+)/ && $1 >= 2.0) {
    print "REAL: NASM $1 found\n";
} else {
    die "REAL: NASM not found\n";
}

exit 0;

在Linux机器上运行它时,我得到:

$ perl dummy.pl
TEST: NASM 2.14 found
TEST with redirection to NUL: NASM version 2.13.03 compiled on Jul 14 2018
TEST without redirection to NUL: NASM version 2.13.03 compiled on Jul 14 2018
REAL: NASM 2.13 found

...然后我意识到我已经在该计算机上安装了nasm:-)


更新1:基于您的第一次运行测试脚本,我建议从OpenSSL源代码行中删除2>NUL,即:

if (`nasm -v` =~ /NASM version ([0-9]+\.[0-9]+)/ && $1 >= 2.0) {

这不会修改OpenSSL功能,但可能会帮助您克服安装难题...


更新2:进行进一步的挖掘我几乎可以确定这里的问题是Strawberry Perl。引用home page

  

Straberry Perl 是用于MS Windows的perl环境,其中包含运行和开发perl应用程序所需的全部内容。它被设计为尽可能接近UNIX系统上的perl环境。

这可转换为system(STRING)qx{}或反引号运算符,它们调用UNIX Shell,例如bash和 cmd.exe。但是

  • OpenSSL VC-WIN64A配置对cmd.exe命令行nasm -v 2>NUL进行硬编码,
  • 该命令行在Strawberry Perl shell中失败,
  • 因此qx{nasm -v 2>NUL}返回一个空字符串,
  • 导致m//正则表达式失败,
  • 使configure脚本为假阴性。

最后:如果有草莓Perl的Windows有替代配置选项,请使用我建议的解决方法或深入研究OpenSSL文档。