如何在VS2015中构建OpenSSL:x86cpuid.asm是一个空文件
我需要为一个使用VS2015、32位的项目构建OpenSSL 我发现的说明是使用VS2015更新/编辑的版本 在 在解包发行版的目录中,我首先执行了如何在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
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
解决了此问题。