ejecutar - programa para compilar c++
¿Cómo se compila OpenSSL para x64? (6)
Después de seguir las instrucciones en INSTALL.W64 tengo dos problemas:
- El código todavía se escribe en la carpeta "out32". Necesito poder enlazar a las versiones de 32 bits y de 64 bits de la biblioteca en mi estación de trabajo, así que no quiero que las versiones de 64 bits afecten a las bibliotecas de 32 bits.
- ¡La salida sigue siendo de 32 bits! Esto significa que recibo errores de "símbolo externo no resuelto" al intentar vincular las bibliotecas desde una aplicación x64.
De acuerdo con la documentación oficial:
"Puede sorprenderse: los artefactos de 64 bits se publican en los subdirectorios out32 * y llevan nombres que terminan * 32.dll. De hecho, el objetivo de compilación de 64 bits es hasta ahora un cambio incremental sobre el objetivo heredado de Windows de 32 bits. las banderas todavía tienen la etiqueta "32", aunque se aplican tanto a objetivos de 32 como de 64 bits ".
Entonces la primera respuesta ya no es necesaria.
Las instrucciones se pueden encontrar aquí:
https://wiki.openssl.org/index.php/Compilation_and_Installation#W64
Para compilar las bibliotecas estáticas (tanto de versión como de depuración), esto es lo que debe hacer:
- Instalar Perl - www.activestate.com
- Ejecute el "Símbolo del sistema de herramientas cruzadas de Visual Studio 2008 x64" (Nota: el símbolo del sistema normal NO FUNCIONARÁ).
- Configurar con perl Configurar VC-WIN64A no compartido sin idea
- Ejecutar: ms / do_win64a
- EDITE ms / nt.mak y cambie "32" a "64" en los directorios de salida:
# The output directory for everything intersting OUT_D=out64.dbg # The output directory for all the temporary muck TMP_D=tmp64.dbg # The output directory for the header files INC_D=inc64 INCO_D=inc64/openssl
- EDITE ms / nt.mak y elimine bufferoverflowu.lib de EX_LIBS si obtiene un error al respecto.
- Ejecutar: nmake -f ms / nt.mak
- EDITAR el archivo ms / do_win64a y AGREGAR "depurar" a todas las líneas, excepto el "ml64" y las dos últimas líneas
- Ejecutar: ms / do_win64a
- Repita los pasos 4 y 5
- ¡EDITA el archivo ms / nt.mak y ADD / Zi a la lista CFLAG!
- Ejecutar: nmake -f ms / nt.mak
Si está compilando en cygwin, puede usar la siguiente secuencia de comandos, suponga que MSDEVPATH ya se ha establecido en su directorio de Visual Studio.
echo "Building x64 OpenSSL"
# save the path of the x86 msdev
MSDEVPATH_x86=$MSDEVPATH
# and set a new var with x64 one
MSDEVPATH_x64=`cygpath -u $MSDEVPATH/bin/x86_amd64`
# now set vars with the several lib path for x64 in windows mode
LIBPATH_AMD64=`cygpath -w $MSDEVPATH_x86/lib/amd64`
LIBPATH_PLATFORM_x64=`cygpath -w $MSDEVPATH_x86/PlatformSDK/lib/x64`
# and set the LIB env var that link looks at
export LIB="$LIBPATH_AMD64;$LIBPATH_PLATFORM_x64"
# the new path for nmake to look for cl, x64 at the start to override any other msdev that was set previously
export PATH=$MSDEVPATH_x64:$PATH
./Configure VC-WIN64A zlib-dynamic --prefix=$OUT --with-zlib-include=zlib-$ZLIB_VERSION/include --with-zlib-lib=zlib-$ZLIB_VERSION/x64_lib
# do the deed
ms/do_win64a.bat
$MSDEVPATH_x86/bin/nmake -f ms/ntdll.mak ${1:-install}
Solucioné el problema de esta manera, usando la fuente 1.0.1c:
Agregue este bloque a util/pl/VC-32.pl
, justo antes de $o=''//';
línea.
if ($debug)
{
$ssl .= ''d'';
$crypto .= ''d'';
}
Agregue este bloque a util/pl/VC-32.pl
, justo antes de la línea if ($debug)
.
if ($FLAVOR =~ /WIN64/)
{
$out_def =~ s/32/64/;
$tmp_def =~ s/32/64/;
$inc_def =~ s/32/64/;
}
Luego crea todas las variedades:
setenv /x86 /release
perl Configure VC-WIN32 --prefix=build -DUNICODE -D_UNICODE
ms/do_ms
nmake -f ms/ntdll.mak
setenv /x64 /release
perl Configure VC-WIN64A --prefix=build
ms/do_win64a.bat
nmake -f ms/ntdll.mak
setenv /x86 /debug
perl Configure debug-VC-WIN32 --prefix=build -DUNICODE -D_UNICODE
ms/do_ms
move /y ms/libeay32.def ms/libeay32d.def
move /y ms/ssleay32.def ms/ssleay32d.def
nmake -f ms/ntdll.mak
setenv /x64 /debug
perl Configure debug-VC-WIN64A --prefix=build
ms/do_win64a.bat
move /y ms/libeay32.def ms/libeay32d.def
move /y ms/ssleay32.def ms/ssleay32d.def
nmake -f ms/ntdll.mak
También puede usar MSYS + mingw-w64 :
1) descarga y extrae msys a C: / msys
2) descarga y extrae mingw-w64 a c: / mingw64
3) ejecutar la secuencia de comandos postinstall msys. Cuando solicite su instalación de mingw, apúntela a C: / mingw64 / bin
4) Extraiga una instantánea diaria de openssl (la versión 1.0.0 tiene un error). En el dir de origen ejecute configure mingw64
hacer
hacer cheque
hacer la instalación
5) openssl está instalado en / local /
Usa Conan . Es muy simple de instalar y usar.
Puede solicitar los archivos listos para su uso. Por ejemplo, para Linux x64 o uso con Visual Studio 2012. Aquí una instrucción de muestra:
conan install OpenSSL/1.0.2g@lasote/stable -s arch="x86_64" -s build_type="Debug" -s compiler="gcc" -s compiler.version="5.3" -s os="Linux" -o 386="False" -o no_asm="False" -o no_rsa="False" -o no_cast="False" -o no_hmac="False" -o no_sse2="False" -o no_zlib="False" ...