OpenSSLを使用しようとしていますが、コンパイルのステップで立ち往生しています。 OpenSSLプロジェクトには非常にわかりにくい(悪い)ドキュメントがあります。
Visual Studio 2017を使用してWindowsで最新のOpenSSLバージョンをビルドする方法について、実際のヘルプはありますか?
OpenSSLの公式サイトに役立つ情報が見つかりませんでした。はい、インターネットにはOpenSSLのコンパイルに関する多くの投稿がありますが、それらはすべて時代遅れです。
VS2017ではなく以前のバージョンを使用しました。ほぼ同じだと思います。手順の概要は次のとおりです。
Perl(ActiveStateまたはStrawberry)をインストールします
NASMをインストールする
PerlとNASMの両方が%PATH%にあることを確認してください
管理者権限でVisual Studio開発者コマンドプロンプトを起動します(32ビットOpenSSLを構築する場合は32ビット版を、64ビットOpenSSLを構築する場合は64ビット版を使用してください)
OpenSSLソースディレクトリのルートからPerl Configure VC-WIN32
、32ビットOpenSSLまたはPerl Configure VC-WIN64A
64ビットOpenSSLが必要な場合
nmake
と入力します
入る nmake test
入る nmake install
いずれかの段階で何か問題が発生した場合は、 [〜#〜] install [〜#〜] ファイルと NOTES.WIN ファイル。
OpenSSL 1.0.2の場合、ビルドを行うPythonスクリプトを作成しました。これらのスクリプトを作成する習慣があります。何かを構築します。
スクリプトはOpenSSL 1.0.2用に作成されています。おそらく、OpenSSL 1.1.0の変更は最小限です。
スクリプトは次のとおりです。
import os
from subprocess import call
import sys
import re
vs_version = "140"
compile_flags = "-no-asm -no-shared"
openssl_32_flag = "VC-WIN32"
openssl_64_flag = "VC-WIN64A"
src_32_suffix = "_" + "vs" + vs_version + "_32"
src_64_suffix = "_" + "vs" + vs_version + "_64"
vs_tools_env_var = "VS" + vs_version + "COMNTOOLS"
if len(sys.argv) < 2:
print("First argument must be the tar.gz file of OpenSSL source")
exit(1)
if len(sys.argv) < 3:
print("Second argument must be 32 or 64")
exit(1)
filename = sys.argv[1]
dirname = filename.replace(".tar.gz","")
working_dir = os.getcwd()
Arch = sys.argv[2]
if Arch != "32" and Arch != "64":
print("Second argument must be 32 or 64")
exit(1)
if not bool(re.match("(openssl-){1}(\d)+(.)(\d)+(.)(\d)+(\w)+(.tar.gz)",filename)):
print("The file given doesn't seem to be an openssl source file. It must be in the form: openssl-x.y.zw.tar.gz")
exit(1)
call("7z x " + filename) #extract the .gz file
dirname_src_32 = dirname + src_32_suffix
dirname_src_64 = dirname + src_64_suffix
dirname_bin_32 = dirname + src_32_suffix + "_build"
dirname_bin_64 = dirname + src_64_suffix + "_build"
openssl_tar_file = filename[0:-3]
if Arch == "32":
#extract tar file for 32
call("7z x " + openssl_tar_file)
os.rename(dirname, dirname_src_32)
#Compile 32
os.chdir(dirname_src_32)
call("Perl Configure " + openssl_32_flag + " --prefix=" + os.path.join(working_dir,dirname_bin_32) + " " + compile_flags,Shell=True)
call(r"ms\do_ms.bat",Shell=True)
call(r"nmake -f ms\nt.mak",Shell=True)
call(r"nmake -f ms\nt.mak instalL",Shell=True)
print("32-bit compilation complete.")
#Go back to base dir
os.chdir(working_dir)
################
if Arch == "64":
#extract for 64
call("7z x " + openssl_tar_file)
os.rename(dirname, dirname_src_64)
#Compile 64
os.chdir(dirname_src_64)
call("Perl Configure " + openssl_64_flag + " --prefix=" + os.path.join(working_dir,dirname_bin_64) + " " + compile_flags,Shell=True)
call(r"ms\do_ms.bat",Shell=True)
call(r"nmake -f ms\nt.mak",Shell=True)
call(r"nmake -f ms\nt.mak instalL",Shell=True)
print("64-bit compilation complete.")
#Go back to base dir
os.chdir(working_dir)
################
os.remove(openssl_tar_file)
オプション1:スクリプトをCompileOpenSSL.py
に保存し、名前の形式がopenssl-1.X.Y.tar.gz
であると予想されるOpenSSLソースファイルをダウンロードします。ここで、コマンドプロンプトのグローバルスコープから7ZipとPerlにアクセスでき、正しいMSVC変数がロードされている(たとえば、vsvars32.bat
を使用して、または適切なターミナルを起動している)と仮定して、次を実行します。
python CompileOpenSSL.py openssl-1.X.Y.tar.gz 32
MSVC 32ビットを使用している場合、または
python CompileOpenSSL.py openssl-1.X.Y.tar.gz 64
mSVC 64ビットの場合。
オプション2:スクリプトが手動で行うことを行います。スクリプトは単にアーカイブを抽出し、ソースを設定し、do_ms.bat
を実行してからnmake
を実行します。ソースに従ってください、それは動作します。
がんばろう!
visual studio cmdを使用してsslディレクトリに移動し、システムパスにPerlとnasmを追加してから、次を入力します。
Perl Configure --openssldir=D:OpenSSLdirectory VC-WIN32
ms\do_ms.bat
nmake -f ms\ntdll.mak
nmake -f ms\ntdll.mak install
( 楽しい。 )
量子物理学者の修正版pythonスクリプト
OpenSSL 1.0.xまたはOpenSSL 1.1.xをコンパイルできます
複数のバージョンのVisual Studio 2017/2019が含まれている状態でコンパイルできます。
1)ファイルを作成します:CompileOpenSSL.py
import os
import os.path
from subprocess import call
import shutil
import sys
import re
import argparse
# args
parser = argparse.ArgumentParser()
parser.add_argument("-f", "--filename", help="First argument must be the tar.gz file of OpenSSL source", required=True)
parser.add_argument("-a", "--Arch", help="Second argument must be x86 or AMD64", required=True)
parser.add_argument("-v", "--vs_version", help="Visual Studio version (eg:90, 140, 150)", required=True)
parser.set_defaults(writeVersionInfos=False)
args = parser.parse_args()
compile_flags = "-no-asm"
#compile_flags = "-no-asm -no-shared"
openssl_32_flag = "VC-WIN32"
openssl_64_flag = "VC-WIN64A"
working_dir = os.getcwd()
dirname = args.filename.replace(".tar.gz","")
src_32_suffix = "_" + "vs" + args.vs_version + "_32"
src_64_suffix = "_" + "vs" + args.vs_version + "_64"
vs_tools_env_var = "VS" + args.vs_version + "COMNTOOLS"
if args.Arch != "x86" and args.Arch != "AMD64":
print("Second argument must be x86 or AMD64")
exit(1)
if not bool(re.match("(openssl-){1}(\d)+(.)(\d)+(.)(\d)+(\w)+(.tar.gz)",args.filename)):
print("The file given doesn't seem to be an openssl source file. It must be in the form: openssl-x.y.zw.tar.gz")
exit(1)
call("7z x -y " + args.filename) #extract the .gz file
dirname_src_32 = dirname + src_32_suffix
dirname_src_64 = dirname + src_64_suffix
dirname_bin_32 = dirname + src_32_suffix + "_build"
dirname_bin_64 = dirname + src_64_suffix + "_build"
openssl_tar_file = args.filename[0:-3]
if args.Arch == "x86":
#delete previous directories
shutil.rmtree(os.getcwd()+'/'+dirname, ignore_errors=True)
shutil.rmtree(os.getcwd()+'/'+dirname_src_32, ignore_errors=True)
#extract tar file for 32
call("7z x -y " + openssl_tar_file)
os.rename(dirname, dirname_src_32)
#Compile 32
os.chdir(dirname_src_32)
print("Perl Configure " + openssl_32_flag + " --prefix=" + os.path.join(working_dir,dirname_bin_32) + " " + compile_flags)
call("Perl Configure " + openssl_32_flag + " --prefix=" + os.path.join(working_dir,dirname_bin_32) + " " + compile_flags,Shell=True)
if( os.path.exists("ms/do_ms.bat") ):
call("ms\do_ms.bat",Shell=True)
print(os.getcwd())
call("nmake -f ms/ntdll.mak",Shell=True)
call("nmake -f ms/ntdll.mak install",Shell=True)
else:
call("nmake",Shell=True)
call("nmake test",Shell=True)
call("nmake install",Shell=True)
print("32-bit compilation complete.")
#Go back to base dir
os.chdir(working_dir)
################
if args.Arch == "AMD64":
#delete previous directories
shutil.rmtree(os.getcwd()+'/'+dirname, ignore_errors=True)
shutil.rmtree(os.getcwd()+'/'+dirname_src_64, ignore_errors=True)
#extract for 64
call("7z x -y " + openssl_tar_file)
os.rename(dirname, dirname_src_64)
#Compile 64
os.chdir(dirname_src_64)
call("Perl Configure " + openssl_64_flag + " --prefix=" + os.path.join(working_dir,dirname_bin_64) + " " + compile_flags,Shell=True)
if( os.path.exists("ms\do_ms.bat") ):
call("ms\do_win64a.bat",Shell=True)
call("nmake -f ms/ntdll.mak",Shell=True)
call("nmake -f ms/ntdll.mak install",Shell=True)
else:
call("nmake",Shell=True)
call("nmake test",Shell=True)
call("nmake install",Shell=True)
print("64-bit compilation complete.")
#Go back to base dir
os.chdir(working_dir)
################
os.remove(openssl_tar_file)
2)ファイルを作成します:CompileOpenSSL_vs.cmd
ECHO --------------------------------------
ECHO Require Python, 7Zip, Perl and NASM in PATH
ECHO --------------------------------------
Rem ------------------------------------------------------
Rem TO CONFIGURE -----------------------------------------
Rem ------------------------------------------------------
Rem SET YOUR LOCAL PATHS-----------------------------------------
SET PATH=C:\Program Files (x86)\7-Zip;C:\Perl64\bin;M:\Backup\Coders\_tools\7-Zip\;%PATH%
Rem SET YOUR OPENSSL ARCHIVE-----------------------------------------
REM SET FILENAME=openssl-1.0.2r.tar.gz
SET FILENAME=openssl-1.1.1b.tar.gz
Rem SET THE VERSION OF YOUR VISUAL STUDIO-----------------------------------------
SET VSVERSION=%1
Rem ------------------------------------------------------
Rem COMPILATION LAUNCH -----------------------------------
Rem ------------------------------------------------------
Rem UTILS PATH-----
SET VSCOMNTOOLSNAME=VS%VSVERSION%COMNTOOLS
Rem Pick the good path for Visual Studio-----------------------------------------
IF %VSVERSION% GEQ 150 (
Echo DO NOT FORGET TO ADD A SYSTEM VARIABLE %VSCOMNTOOLSNAME% - like: "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\"
SET VCVARPATH="%%%VSCOMNTOOLSNAME%%%..\..\VC\Auxiliary\Build\vcvarsall.bat"
) ELSE (
SET VCVARPATH="%%%VSCOMNTOOLSNAME%%%..\..\VC\vcvarsall.bat"
)
Rem Set env -----------------------------------------
@pushd "%~dp0"
call %VCVARPATH% %2
@popd
Rem ------------------------------------------------------
Rem TEST APP EXIST -----------------------------------
Rem ------------------------------------------------------
where /q 7z.exe
IF ERRORLEVEL 1 (
ECHO The application "7z.exe" is missing. Ensure to add/install it to the PATH in beginning of this script, check SET PATH
PAUSE
EXIT /B
)
where /q Perl.exe
IF ERRORLEVEL 1 (
ECHO The application "Perl.exe" is missing. Ensure to add/install it to the PATH in beginning of this script, check SET PATH
PAUSE
EXIT /B
)
where /q nmake.exe
IF ERRORLEVEL 1 (
ECHO The application "nmake.exe" is missing. Ensure to add/install it to the PATH in beginning of this script, check SET PATH
PAUSE
EXIT /B
)
where /q py.exe
IF ERRORLEVEL 1 (
ECHO The application "py.exe" [shortcut of python] is missing. Ensure to add/install it to the PATH in beginning of this script, check SET PATH
PAUSE
EXIT /B
)
Rem Launch compilation -----------------------------------------
py CompileOpenSSL.py -f %FILENAME% -a %2 -v %VSVERSION%
PAUSE
3)コマンドライン(Visual Studioの外部)からコンパイルを開始します。例:
CompileOpenSSL_vs.cmd 150 x86
CompileOpenSSL_vs.cmd 150 AMD64
CompileOpenSSL_vs.cmd 90 x86