Como construir OpenSSL no Windows com Visual Studio 2017?
Existe alguma ajuda real para construir a última versão do OpenSSL no Windows com Visual Studio 2017?
Não encontrei nenhuma informação útil no site oficial do OpenSSL. Sim, há um monte de posts na Internet sobre a compilação OpenSSL, mas todos eles são obsoletos.2 answers
Instalar o Perl (ActiveState ou Strawberry))
Instalar o NASM
Certifique - se que o Perl e o NASM estão no seu %PATH%
Acenda uma linha de comandos do programador (certifique-se de que usa a de 32 bits se estiver a construir o OpenSSL de 32 bits ou o OpenSSL de 64 bits se estiver a construir o OpenSSL de 64 bits)
Da raiz da pasta de código OpenSSL enter
perl Configure VC-WIN32
, se quiser OpenSSL de 32 bits ouperl Configure VC-WIN64A
Se quiser OpenSSL de 64 bitsEnter
nmake
Enter
nmake test
Enter
nmake install
Se alguma coisa correr mal em qualquer fase, verifique o ficheiro instale e as notas .Ficheiro WIN.
Para o OpenSSL 1.0.2, escrevi um script em Python que faz o edifício para mim. Tenho o hábito de fazer estes guiões, porque não gosto de reinventar a roda sempre que preciso de construir alguma coisa.
O programa é feito para o OpenSSL 1.0.2. Provavelmente as alterações são mínimas para OpenSSL 1.1.0.
Aqui está o guião:
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)
Opção 1 : grava o programa para CompileOpenSSL.py
e obtém o ficheiro de código OpenSSL que deverá ter o formato de nome openssl-1.X.Y.tar.gz
. Agora assumindo que o 7zip e o perl estão acessíveis a partir do âmbito global na sua linha de comandos e que você tem as variáveis MSVC correctas carregadas (com, por exemplo, vsvars32.bat
, ou a iniciar o terminal direito), execute o seguinte:
python CompileOpenSSL.py openssl-1.X.Y.tar.gz 32
Se estiver a utilizar MSVC 32-bit, ou
python CompileOpenSSL.py openssl-1.X.Y.tar.gz 64
Para MSVC 64 bits.
Opção 2 : faça o que o programa faz manualmente. O programa simplesmente extrai o pacote, configura as fontes e executa do_ms.bat
Depois nmake
. Segue a fonte e ela trabalhar.