我正在尝试构建OpenSSL,但是我有一个大问题,我无法解决。
我重新安装了VS 2017,perl,strawberry,nasm,但没有任何效果。
%PATH%
包含perl路径,nasm路径等。
我在github上发现了相同的问题,但仍然无法解决。 (我的设置是x64)
答案 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
。但是
VC-WIN64A
配置对cmd.exe
命令行nasm -v 2>NUL
进行硬编码,qx{nasm -v 2>NUL}
返回一个空字符串,m//
正则表达式失败,最后:如果有草莓Perl的Windows有替代配置选项,请使用我建议的解决方法或深入研究OpenSSL文档。