2008-10-01 10 views
15

Après avoir suivi les instructions INSTALL.W64 J'ai deux problèmes:Comment compiler OpenSSL for x64?

  • Le code est encore écrit dans le dossier « Out32 ». Je dois être en mesure de lier à la fois les versions 32 bits et 64 bits de la bibliothèque sur mon poste de travail, donc je ne veux pas que les versions 64 bits clobent les bibliothèques 32 bits.
  • La sortie est toujours en 32 bits! Cela signifie que je reçois des erreurs de "symbole externe non résolu" lorsque j'essaie de créer un lien vers les bibliothèques à partir d'une application x64.

Répondre

21

Pour compiler les bibliothèques statiques (à la fois de libération et de débogage), voici ce que vous devez faire:

  1. Installer Perl - www.activestate.com
  2. Exécutez le « Visual Studio 2008 Outils x64 Cross Invite de commande »(Remarque: L'invite de commande régulière nE FONCTIONNE pAS.)
  3. Configurer avec perl Configurer VC-WIN64A sans partage sans idée
  4. Run: ms \ do_win64a
  5. ms EDIT \ nt.mak et de changement "32" à "64" dans les dirs de sortie:
 
    # 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 EDIT \ nt.mak et retirer bufferoverflowu. lib de EX_LIBS si vous obtenez une erreur à ce sujet.
  2. Run: de nmake ms \ nt.mak
  3. EDIT le ms \ fichier do_win64a et ADD "debug" à toutes les lignes, à l'exception du "ml64" et les deux dernières lignes
  4. Run: ms \ do_win64a
  5. Répétez les étapes 4 et 5
  6. MODIFIER le fichier ms \ nt.mak et ADD/Zi dans la liste CFLAG!
  7. Run: -f nmake ms \ nt.mak
+0

Il semble que les sorties sont toujours nommées '* 32.lib' (' 'libeay32.dll' et ssleay32.dll '). Les noms sont-ils faux ou je ne suis pas ces instructions correctement? –

+0

Les noms sont corrects. – NuSkooler

+0

En plus de ce qui précède, j'ai également dû installer nasm - http://www.nasm.us/ – Mark

-1

Vous pouvez également utiliser MSYS + mingw-w64:

1) télécharger et extraire msys C: \ msys
2) télécharger et extraire mingw- w64 à c: \ mingw64
3) exécutez msys script de post-installation. Quand il demande votre installation Mingw, pointez sur C: \ mingw64 \ bin
4) Extrayez un instantané quotidien openssl (la version 1.0.0 a un bug). Dans la source dir run configure mingw64
faire
make check
make install
5) OpenSSL est installé dans/local/

1

Si vous construisez dans Cygwin, vous pouvez utiliser le script suivant, on suppose MSDEVPATH a déjà été mis à votre Visual studio 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

J'ai résolu le problème de cette façon, en utilisant la source de 1.0.1c:

Ajoutez ce bloc à util/pl/VC-32.pl, juste avant la ligne $o='\\';.

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

Ajouter ce bloc à util/pl/VC-32.pl, juste avant la ligne if ($debug).

if ($FLAVOR =~ /WIN64/) 
    { 
    $out_def =~ s/32/64/; 
    $tmp_def =~ s/32/64/; 
    $inc_def =~ s/32/64/; 
    } 

ensuite construire toutes les variétés:

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

Selon la documentation officielle:

« Vous pourriez être surpris: les objets 64 bits sont en effet la production du Out32 * sous-répertoires et ours noms qui se terminent par * 32.dll Fact est la 64 bits compiler la cible est jusqu'à présent un changement incrémental sur la cible 32 bits Windows hérité.Nombreux drapeaux de compilation sont toujours étiquetés "32" bien que ceux-ci s'appliquent aux deux cibles 32 et 64 bits. "

La première réponse n'est donc plus nécessaire.

Les instructions se trouvent ici:

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

2

Utilisez Conan. C'est très simple à installer et à utiliser.

Vous pouvez demander les fichiers prêts à l'emploi. Par exemple, pour Linux x64 ou utilisation avec Visual Studio 2012. Voici un échantillon sonore:

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" ...