2008-10-01 8 views
15

Después de seguir las instrucciones de INSTALL.W64 Tengo dos problemas:¿Cómo compila OpenSSL para x64?

  • 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ímbolos externos no resueltos" al intentar vincular las bibliotecas desde una aplicación x64.

Respuesta

21

Para compilar las librerías estáticas (tanto la versión y depuración), esto es lo que hay que hacer:

  1. Instalar Perl - www.activestate.com
  2. Ejecutar los "Visual Studio 2008 Herramientas x64 Cruz Símbolo del sistema de "(Nota: El símbolo del sistema normal no funcionará.)
  3. Configurar con perl Configurar VC-WIN64A sin compartida-no-idea
  4. Run: MS \ do_win64a
  5. ms EDITAR \ nt.mak y cambio "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 
  1. ms EDITAR \ nt.mak y quitar bufferoverflowu. lib de EX_LIBS si obtiene un error al respecto.
  2. Run: NMAKE -f ms \ nt.mak
  3. editar el ms \ archivo do_win64a y ADD "depuración" a todas las líneas, excepto la "ML64" y los dos últimos líneas
  4. Run: MS \ do_win64a
  5. Repita los pasos 4 y 5
  6. ¡EDITE el archivo ms \ nt.mak y ADD/Zi en la lista CFLAG!
  7. Run: NMAKE -f ms \ nt.mak
+0

Parece que las salidas todavía se llaman '* 32.lib' (' 'libeay32.dll' y ssleay32.dll '). ¿Los nombres son incorrectos o no estoy siguiendo estas instrucciones correctamente? –

+0

Los nombres son correctos. – NuSkooler

+0

Además de lo anterior, también tuve que instalar Nasm - http://www.nasm.us/ – Mark

-1

También puede utilizar MSYS + mingw-w64:

1) descargar y extraer MSYS a C: \ MSYS
2) descargar y extraer mingw- w64 a c: \ mingw64
3) ejecute el script postinstall de 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 la fuente dir plazo configurar mingw64
hacen
make check
make install
5) OpenSSL está instalado en/local/

1

Si usted está construyendo en cygwin, puede utilizar el siguiente script, asumen MSDEVPATH ya se ha establecido en el Estudio Visual dir

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} 
3

he resuelto el problema de esta manera, utilizando la fuente 1.0.1c:

Agregue este bloque a util/pl/VC-32.pl, justo antes de la línea $o='\\';.

if ($debug) 
    { 
    $ssl .= 'd'; 
    $crypto .= 'd'; 
    } 

Añadir 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/; 
    } 

Entonces construir 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 
2

De acuerdo con la documentación oficial:

"puede que se sorprenda: los artefactos de 64 bits son de hecho la producción en el Out32 * subdirectorios y oso 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 ventanas de 32 bits. Numerosas banderas de compilación siguen siendo etiquetadas como "32" aunque se aplican tanto a objetivos de 32 como de 64 bits ".

Por lo que la primera respuesta ya no es necesaria.

Las instrucciones se pueden encontrar aquí:

https://wiki.openssl.org/index.php/Compilation_and_Installation#W64

2

Uso Conan. Es muy simple de instalar y usar.

Puede solicitar los archivos listos para su uso. Por ejemplo para x64 Linux o el uso con Visual Studio 2012. A continuación, una instrucción de la muestra:

conan install OpenSSL/[email protected]/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" ...