如何在VS2015中构建OpenSSL:x86cpuid.asm是一个空文件

如何在VS2015中构建OpenSSL:x86cpuid.asm是一个空文件,openssl,visual-studio-2015,Openssl,Visual Studio 2015,我需要为一个使用VS2015、32位的项目构建OpenSSL 我发现的说明是使用VS2015更新/编辑的版本 在 在解包发行版的目录中,我首先执行了cl以验证我是否有MS编译器构建提示符(由其批处理文件设置),并执行了perl-v以确保我有perl。那么 perl Configure VC-WIN32 no-idea no-mdc2 no-rc5 --prefix=e:\some\path ms\do_ms nmake -f ms\nt.mak 在最后一步,我得到: Building O

我需要为一个使用VS2015、32位的项目构建OpenSSL

我发现的说明是使用VS2015更新/编辑的版本 在

在解包发行版的目录中,我首先执行了
cl
以验证我是否有MS编译器构建提示符(由其批处理文件设置),并执行了
perl-v
以确保我有perl。那么

perl Configure VC-WIN32   no-idea no-mdc2 no-rc5  --prefix=e:\some\path
ms\do_ms
nmake -f ms\nt.mak
在最后一步,我得到:

Building OpenSSL
    perl .\util\copy-if-different.pl ".\crypto\buildinf.h" "tmp32\buildinf.h"
Copying: ./crypto/buildinf.h to tmp32/buildinf.h
    perl .\util\copy-if-different.pl ".\crypto\opensslconf.h" "inc32\openssl\opensslconf.h"
Copying: ./crypto/opensslconf.h to inc32/openssl/opensslconf.h
    ml /nologo /Cp /coff /c /Cx /Zi /Fotmp32\x86cpuid.obj tmp32\x86cpuid.asm
Assembling: tmp32\x86cpuid.asm
tmp32\x86cpuid.asm(1) : error A2088:END directive required at end of file
NMAKE : fatal error U1077: '"D:\@Prog-Charon\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\ml.EXE"' : return code '0x1'
Stop.
我发现
E:\C++Libs\openssl-1.0.2e\tmp32\x86cpuid.asm
是一个零长度文件

我真正想要的是为将使用动态运行时库的项目提供(构建或查找现成的)静态库


更新:如果我手动运行该步骤

perl crypto\x86cpuid.pl win32 > tmp32\x86cpuid.asm
然后当makefile到达该文件时,它会给我

    ml /nologo /Cp /coff /c /Cx /Zi /Fotmp32\x86cpuid.obj tmp32\x86cpuid.asm
Assembling: tmp32\x86cpuid.asm
tmp32\x86cpuid.asm(35) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(59) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(64) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(70) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(75) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(90) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(98) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(105) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(165) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(182) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(186) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(322) : error A2085:instruction or register not accepted in current CPU mode
tmp32\x86cpuid.asm(335) : error A2085:instruction or register not accepted in current CPU mode
NMAKE : fatal error U1077: '"D:\@Prog-Charon\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\ml.EXE"' : return code '0x1'
现在碰巧第35行等是
cpuid
,这就是拥有这个文件的全部意义

在Windows上将OpenSSL 1.0.2d构建为静态库 注:以下文字摘自

所需软件
  • (2015社区)
  • (2.2.5)
  • (9.20)
  • (5.22.0.1)
  • (2.11.08)
准备工作 创建工作目录:

mkdir C:\build\bin\
mkdir C:\build\src\
使用下载到
C:\build\src\
目录,并验证下载的存档文件的签名:

cd C:\build\src\
gpg --keyserver pgp.mit.edu --recv-keys 0E604491
gpg --verify openssl-1.0.2d.tar.gz.asc openssl-1.0.2d.tar.gz
构建32位版本 将归档文件
openssl-1.0.2d.tar.gz
提取到
C:\build\src\openssl-1.0.2d-x86
目录:

cd C:\build\src\
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar.gz
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar
rename openssl-1.0.2d openssl-1.0.2d-x86
del openssl-1.0.2d.tar
cd C:\build\src\openssl-1.0.2d-x86
set PATH=%PATH%;C:\nasm
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
perl Configure VC-WIN32 --prefix=C:\build\bin\openssl-1.0.2d-x86 enable-static-engine
ms\do_nasm
nmake /f ms\nt.mak
nmake /f ms\nt.mak test
nmake /f ms\nt.mak install
cd C:\build\src\
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar.gz
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar
rename openssl-1.0.2d openssl-1.0.2d-x64
del openssl-1.0.2d.tar
cd C:\build\src\openssl-1.0.2d-x64
set PATH=%PATH%;C:\nasm
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
perl Configure VC-WIN64A --prefix=C:\build\bin\openssl-1.0.2d-x64 enable-static-engine
ms\do_win64a
nmake /f ms\nt.mak
nmake /f ms\nt.mak test
nmake /f ms\nt.mak install
新命令行窗口中构建OpenSSL并将其安装到
C:\build\bin\OpenSSL-1.0.2d-x86
目录中:

cd C:\build\src\
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar.gz
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar
rename openssl-1.0.2d openssl-1.0.2d-x86
del openssl-1.0.2d.tar
cd C:\build\src\openssl-1.0.2d-x86
set PATH=%PATH%;C:\nasm
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
perl Configure VC-WIN32 --prefix=C:\build\bin\openssl-1.0.2d-x86 enable-static-engine
ms\do_nasm
nmake /f ms\nt.mak
nmake /f ms\nt.mak test
nmake /f ms\nt.mak install
cd C:\build\src\
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar.gz
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar
rename openssl-1.0.2d openssl-1.0.2d-x64
del openssl-1.0.2d.tar
cd C:\build\src\openssl-1.0.2d-x64
set PATH=%PATH%;C:\nasm
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
perl Configure VC-WIN64A --prefix=C:\build\bin\openssl-1.0.2d-x64 enable-static-engine
ms\do_win64a
nmake /f ms\nt.mak
nmake /f ms\nt.mak test
nmake /f ms\nt.mak install
生成的生成位于
C:\build\bin\openssl-1.0.2d-x86
目录中

构建64位版本 将归档文件
openssl-1.0.2d.tar.gz
提取到
C:\build\src\openssl-1.0.2d-x64
目录:

cd C:\build\src\
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar.gz
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar
rename openssl-1.0.2d openssl-1.0.2d-x86
del openssl-1.0.2d.tar
cd C:\build\src\openssl-1.0.2d-x86
set PATH=%PATH%;C:\nasm
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
perl Configure VC-WIN32 --prefix=C:\build\bin\openssl-1.0.2d-x86 enable-static-engine
ms\do_nasm
nmake /f ms\nt.mak
nmake /f ms\nt.mak test
nmake /f ms\nt.mak install
cd C:\build\src\
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar.gz
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar
rename openssl-1.0.2d openssl-1.0.2d-x64
del openssl-1.0.2d.tar
cd C:\build\src\openssl-1.0.2d-x64
set PATH=%PATH%;C:\nasm
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
perl Configure VC-WIN64A --prefix=C:\build\bin\openssl-1.0.2d-x64 enable-static-engine
ms\do_win64a
nmake /f ms\nt.mak
nmake /f ms\nt.mak test
nmake /f ms\nt.mak install
新命令行窗口中构建OpenSSL并将其安装到
C:\build\bin\OpenSSL-1.0.2d-x64
目录中:

cd C:\build\src\
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar.gz
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar
rename openssl-1.0.2d openssl-1.0.2d-x86
del openssl-1.0.2d.tar
cd C:\build\src\openssl-1.0.2d-x86
set PATH=%PATH%;C:\nasm
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
perl Configure VC-WIN32 --prefix=C:\build\bin\openssl-1.0.2d-x86 enable-static-engine
ms\do_nasm
nmake /f ms\nt.mak
nmake /f ms\nt.mak test
nmake /f ms\nt.mak install
cd C:\build\src\
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar.gz
"C:\Program Files\7-Zip\7z" x openssl-1.0.2d.tar
rename openssl-1.0.2d openssl-1.0.2d-x64
del openssl-1.0.2d.tar
cd C:\build\src\openssl-1.0.2d-x64
set PATH=%PATH%;C:\nasm
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
perl Configure VC-WIN64A --prefix=C:\build\bin\openssl-1.0.2d-x64 enable-static-engine
ms\do_win64a
nmake /f ms\nt.mak
nmake /f ms\nt.mak test
nmake /f ms\nt.mak install

生成的版本位于
C:\build\bin\openssl-1.0.2d-x64
目录中。

您可能应该看看
Win32.INSTALL
。我相信这就是OpenSSL为平台提供指导的地方。你的文章和我引用(和报道)的内容之间的区别是“do_nasm”,我想这意味着它使用nasm而不是masm。这很有趣,因为asm文件是我遇到问题的地方,但直接与其他指南相矛盾,这些指南说“使用nasm是错误的……visual studio直接处理它”,同样,草莓Perl也有问题,应该使用ActiveState。您还使用了旧版本。而且,您提供了您所使用的各种工具的准确版本,这赢得了我的支持,尽管我还没有重试。@JDługosz我一开始试图在没有nasm的情况下构建它,但构建很难成功,所以经过一点搜索后,我从Andy Polyakov(OpenSSL核心开发团队成员)那里找到了信息那个之所以使用草莓Perl,是因为ActiveState每年都让从他们的网站下载免费版本变得越来越困难。所以我已经迁移到了草莓Perl,到目前为止我真的很喜欢它。其他人发布的东西,大概对他们有用。。。可能是VS/masm或OpenSSL的确切版本改变了这一点。我确认这适用于VS2015、nasm和ActiveState perl调用vcvarsall.bat会导致此错误:
模块计算机类型“X86”与目标计算机类型“x64”冲突
通过调用
C:\Program Files(X86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat
解决了此问题。