Compiling OpenSSL with MinGW: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
m (Corrected lines)
 
(12 intermediate revisions by 8 users not shown)
Line 1: Line 1:
<textarea style='width:98%;' cols='90' rows='25' class='textarea' readonly="readonly">
{{LangSwitch}}
[[Category:MinGW]]<br />[[Category:Windows]]<br />[[Category:Qt5]]
[[Category:MinGW]]
[[Category:Windows]]
[[Category:Qt5]]
Qt 5 / QtWebkit can make use of OpenSSL, which MinGW distributions do not ship.
 
==Pre-built packages==
 
The [http://slproweb.com/products/Win32OpenSSL.html Win32OpenSSL project] provides pre-compiled libraries for both 32 and 64 bit. However, these depend on the Microsoft Visual C++ 2008 runtime being installed.
 
Inside [[MSYS2]] shell, pre-built openssl can be obtained from MSYS2 repo, with this command: pacman -S openssl
 
==Compiling on your own==
 
===Requirements===
 
*Either use MSYS, or use [[MSYS2]] :
**MSYS shell command prompt (an sh shell + some UNIX tools, get it from http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.11/MSYS-1.0.11.exe/download?use_mirror=garr. It's also an (optional) part of mingw.org installer). Install it in C:drive in "msys" folder.
**[[MSYS2]] shell command prompt, it can be obtained from https://msys2.github.io/ Install it in C:drive in "msys2" folder.
*Working MinGW, or MinGW-w64 toolchain:
**Either get & load MinGW, or, get & load MinGW-w64 toolchains (from their respective project website), or, use "MinGW-w64" toolchains from MSYS2 repo, inside the MSYS2-shell.
**NOTE: Do not use (or try to avoid using) different type of toolchains for building different sub-components for the same/main project, when targeted for same platform/OS. If you are using MinGW-w64 based toolchains from MSYS2\mingw32 or MSYS2\mingw64, then for main project & all sub-components, use same MSYS2 toolchains. If you are using MinGW toolchain, then for all of your sub-components & main project, use same MinGW toolchain. If you are using MinGW-w64 toolchains from "MinGW-builds", then for all sub-components & main project, use same MinGW-builds toolchains.
 
===How to build===
 
*Download latest+stable [https://www.openssl.org/ OpenSSL] (You must use HTTPS secure encrypted connection to obtain source file) from https://www.openssl.org/source (e.g. openssl-1.0.1c.tar.gz)
*Either start MSYS-shell, or start MSYS2-shell:
**Start a MSYS shell command prompt (C:.0\msys.bat)
**Or, start MSYS2 shell command prompt (C:2\msys2_shell.bat)
***See inside this [[MSYS2]] page, how to prepare MSYS2 with build/compile related toolchains, tools & dependencies
 
*Extract source tar.gz using MSYS tar or MSYS2 tar (and ignore the symlink warnings)
**''don't use 7zip or other apps, since they fail to set up any symlinks! tar will also complain about symlinks, but compilation will still succeed.''
 
*Unzip/decompress source:
 
<code>
$ tar xvzf openssl-1.0.1c.tar.gz
$ cd openssl-1.0.1c
</code>
 
*Check that gcc is in PATH, otherwise add it: change below command to match with your-side directory's exact name & letter-case & location:
**If using MinGW-builds toolchain (which is usually located outside of MSYS or MSYS2), then execute this in MSYS or in MSYS2:
 
<code>
$ export PATH="/c/Mingw-builds/bin:$PATH"
</code>
 
**If using MSYS shell, and if you have installed MinGW toolchain into C:32 directory, then execute this:
 
<code>
$ export PATH="/c/mingw32/bin:$PATH"
</code>
 
**If using MSYS2 shell, execute this, if you are building for 32bit:
 
<code>
$ export PATH="/c/msys2/mingw32/bin:$PATH"
#or if using 64-bit MSYS2
 
$ export PATH="/c/msys64/mingw32/bin:$PATH"
 
</code>
 
**If using MSYS2 shell, execute this, if you are building for 64bit:
 
<code>
$ export PATH="/c/msys32/mingw64/bin:$PATH"
#or if using 64-bit MSYS2
 
$ export PATH="/c/msys64/mingw64/bin:$PATH"


== Compiling OpenSSL with MinGW or MinGW-w64 ==
</code>


Qt 5 / QtWebkit can make use of OpenSSL, which MinGW distributions do not ship.
*Check that you have your PATH correctly setup
<syntaxhighlight lang="shell">
# should point to a mingw distribution of gcc
 
$ which gcc
/c/msys64/mingw32/bin/gcc
</syntaxhighlight>
 
*for MinGW (32 bit) do:


== Pre-built packages ==
<code>
$ ./Configure --prefix=$PWD/dist no-idea no-mdc2 no-rc5 shared mingw
</code>


The &quot;Win32OpenSSL project&amp;quot;:http://slproweb.com/products/Win32OpenSSL.html provides pre-compiled libraries for both 32 and 64 bit. However, these depend on the Microsoft Visual C++ 2008 runtime being installed.
*for MinGW-w64 do:


Inside [[MSYS2]] shell, pre-built openssl can be obtained from MSYS2 repo, with this command: pacman -S openssl
<code>
$ ./Configure --prefix=$PWD/dist no-idea no-mdc2 no-rc5 shared mingw64
</code>


== Compiling on your own ==
*Compile & install:


=== Requirements ===
<code>
$ make depend && make && make install
</code>


* Either use MSYS, or use [[MSYS2]] :
==Errors==
** MSYS shell command prompt (an sh shell + some UNIX tools, get it from http://sourceforge.net/projects/mingw/files/MSYS/Base/msys-core/msys-1.0.11/MSYS-1.0.11.exe/download?use_mirror=garr. It's also an (optional) part of mingw.org installer). Install it in C:drive in &quot;msys&amp;quot; folder.
** [[MSYS2]] shell command prompt, it can be obtained from https://msys2.github.io/ Install it in C:drive in &quot;msys2&amp;quot; folder.
* Working MinGW, or MinGW-w64 toolchain:
** Either get &amp; load MinGW, or, get &amp; load MinGW-w64 toolchains (from their respective project website), or, use &quot;MinGW-w64&amp;quot; toolchains from MSYS2 repo, inside the MSYS2-shell.
** NOTE: Do not use (or try to avoid using) different type of toolchains for building different sub-components for the same/main project, when targeted for same platform/OS. If you are using MinGW-w64 based toolchains from MSYS2\mingw32 or MSYS2\mingw64, then for main project &amp; all sub-components, use same MSYS2 toolchains. If you are using MinGW toolchain, then for all of your sub-components &amp; main project, use same MinGW toolchain. If you are using MinGW-w64 toolchains from &quot;MinGW-builds&amp;quot;, then for all sub-components &amp; main project, use same MinGW-builds toolchains.


=== How to build ===
*If you run into


* Download latest+stable &quot;OpenSSL&amp;quot;:https://www.openssl.org/ (You must use HTTPS secure encrypted connection to obtain source file) from https://www.openssl.org/source (e.g. openssl-1.0.1c.tar.gz)
<code>
* Either start MSYS-shell, or start MSYS2-shell:
perl asm/sha1-x86_64.pl mingw64 > sha1-x86_64.s
** Start a MSYS shell command prompt (C:.0\msys.bat)
gcc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include -D_WINDLL -DOPENSSL_PIC -DOPENSSL_TH
** Or, start MSYS2 shell command prompt (C:2\msys2_shell.bat)
READS -D_MT -DDSO_WIN32 -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE -DOPENSSL_IA
*** See inside this [[MSYS2]] page, how to prepare MSYS2 with build/compile related toolchains, tools &amp; dependencies
32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM-
DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c -o sha1-x86_
64.o sha1-x86_64.s
sha1-x86_64.s: Assembler messages:
sha1-x86_64.s:1824: Warning: end of file not at end of a line; newline inserted
sha1-x86_64.s:2183: Error: number of operands mismatch for `rol'
make[2]: '''* [sha1-x86_64.o] Error 1'''
make[2]: Leaving directory `/d/dev/tmp/openssl-1.0.1c/crypto/sha'
make[1]:'''* [subdirs] Error 1'''
make[1]: Leaving directory `/d/dev/tmp/openssl-1.0.1c/crypto'
make: '''* [build_crypto] Error 1'''
</code>


* Extract source tar.gz using MSYS tar or MSYS2 tar (and ignore the symlink warnings)
''' check out http://openssl.6102.n7.nabble.com/Compile-error-with-MinGW-w64-td36657.html'''
** ''don't use 7zip or other apps, since they fail to set up any symlinks! tar will also complain about symlinks, but compilation will still succeed.''
'''* Use perl inside MSYS or inside MSYS2'''
'''* or change crypto/perlasm/x86_64-xlate.pl as mentioned in the e-mail thread.'''


* Unzip/decompress source:<br /><code><br />&amp;#36; tar xvzf openssl-1.0.1c.tar.gz<br />&amp;#36; cd openssl-1.0.1c<br /></code>
==Using it==


* Check that gcc is in PATH, otherwise add it: change below command to match with your-side directory's exact name &amp; letter-case &amp; location:
*If you are using cmd.exe (Cmd-shell), then: add the bin, include, lib folders to your compilation environment:
** If using MinGW-builds toolchain (which is usually located outside of MSYS or MSYS2), then execute this in MSYS or in MSYS2:<br /><code><br />&amp;#36; export PATH=&quot;/c/Mingw-builds/bin:&amp;#36;PATH&amp;quot;<br /></code>
** If using MSYS shell, and if you have installed MinGW toolchain into C:32 directory, then execute this:<br /><code><br />&amp;#36; export PATH=&quot;/c/mingw32/bin:&amp;#36;PATH&amp;quot;<br /></code>
** If using MSYS2 shell, execute this, if you are building for 32bit:<br /><code><br />&amp;#36; export PATH=&quot;/c/msys2/mingw32/bin:&amp;#36;PATH&amp;quot;<br /></code>
** If using MSYS2 shell, execute this, if you are building for 64bit:<br /><code><br />&amp;#36; export PATH=&quot;/c/msys2/mingw64/bin:&amp;#36;PATH&amp;quot;<br /></code>


* for MinGW (32 bit) do:<br /><code><br />&amp;#36; ./Configure —prefix=&amp;#36;PWD/dist no-idea no-mdc2 no-rc5 shared mingw<br /></code>
<code>C:\> set PATH=PATH;C:\openssl–1.0.1c\dist\bin</code>


* for MinGW-w64 do:<br /><code><br />&amp;#36; ./Configure —prefix=&amp;#36;PWD/dist no-idea no-mdc2 no-rc5 shared mingw64<br /></code>
<code>C:\> set INCLUDE=INCLUDE;C:\openssl–1.0.1c\dist\include</code>


* Compile &amp; install:<br /><code><br />&amp;#36; make depend &amp;&amp; make &amp;&amp; make install<br /></code>
<code>C:\> set LIB=LIB;C:\openssl–1.0.1c\dist\lib</code>


== Errors ==
*If you are using MSYS2/MSYS-shell, then: add the bin, include, lib folders to your compilation environment:


* If you run into<br /><code><br />perl asm/sha1-x86_64.pl mingw64 &gt; sha1-x86_64.s<br />gcc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include -D_WINDLL -DOPENSSL_PIC -DOPENSSL_TH<br />READS -D_MT -DDSO_WIN32 -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE -DOPENSSL_IA<br />32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM <s>DSHA256_ASM</s><br />DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c -o sha1-x86_<br />64.o sha1-x86_64.s<br />sha1-x86_64.s: Assembler messages:<br />sha1-x86_64.s:1824: Warning: end of file not at end of a line; newline inserted<br />sha1-x86_64.s:2183: Error: number of operands mismatch for `rol'<br />make[2]: '''* [sha1-x86_64.o] Error 1<br />make[2]: Leaving directory `/d/dev/tmp/openssl-1.0.1c/crypto/sha'<br />make[1]:'''* [subdirs] Error 1<br />make[1]: Leaving directory `/d/dev/tmp/openssl-1.0.1c/crypto'<br />make: '''* [build_crypto] Error 1<br /></code>
<code>$ export PATH="$PATH:/c/openssl-1.0.1c/dist/bin"</code>
<br />''' check out http://openssl.6102.n7.nabble.com/Compile-error-with-MinGW-w64-td36657.html<br />'''* Use perl inside MSYS or inside MSYS2<br />'''* or change crypto/perlasm/x86_64-xlate.pl as mentioned in the e-mail thread.


== Using it ==
<code>$ export INCLUDE="$INCLUDE:/c/openssl-1.0.1c/dist/include"</code>


* If you are using cmd.exe (Cmd-shell), then: add the bin, include, lib folders to your compilation environment:<br /><code><br />C:gt; set PATH=PATH;C:–1.0.1c\dist\bin<br />C:gt; set INCLUDE=INCLUDE;C:–1.0.1c\dist\include<br />C:gt; set LIB=LIB;C:–1.0.1c\dist\lib<br /></code>
<code>$ export LIB="$LIB:/c/openssl-1.0.1c/dist/lib"</code>
* If you are using MSYS2/MSYS-shell, then: add the bin, include, lib folders to your compilation environment:<br /><code><br />&amp;#36; export PATH=&quot;&amp;#36;PATH:/c/openssl-1.0.1c/dist/bin&amp;quot;<br />&amp;#36; export INCLUDE=&quot;&amp;#36;INCLUDE:/c/openssl-1.0.1c/dist/include&amp;quot;<br />&amp;#36; export LIB=&quot;&amp;#36;LIB:/c/openssl-1.0.1c/dist/lib&amp;quot;<br /></code>


When you now run Qt's configure.exe openssl should be detected, and Qt links against the libraries.
When you now run Qt's configure.exe openssl should be detected, and Qt links against the libraries.

Latest revision as of 04:33, 28 December 2021

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

Qt 5 / QtWebkit can make use of OpenSSL, which MinGW distributions do not ship.

Pre-built packages

The Win32OpenSSL project provides pre-compiled libraries for both 32 and 64 bit. However, these depend on the Microsoft Visual C++ 2008 runtime being installed.

Inside MSYS2 shell, pre-built openssl can be obtained from MSYS2 repo, with this command: pacman -S openssl

Compiling on your own

Requirements

  • Either use MSYS, or use MSYS2 :
  • Working MinGW, or MinGW-w64 toolchain:
    • Either get & load MinGW, or, get & load MinGW-w64 toolchains (from their respective project website), or, use "MinGW-w64" toolchains from MSYS2 repo, inside the MSYS2-shell.
    • NOTE: Do not use (or try to avoid using) different type of toolchains for building different sub-components for the same/main project, when targeted for same platform/OS. If you are using MinGW-w64 based toolchains from MSYS2\mingw32 or MSYS2\mingw64, then for main project & all sub-components, use same MSYS2 toolchains. If you are using MinGW toolchain, then for all of your sub-components & main project, use same MinGW toolchain. If you are using MinGW-w64 toolchains from "MinGW-builds", then for all sub-components & main project, use same MinGW-builds toolchains.

How to build

  • Download latest+stable OpenSSL (You must use HTTPS secure encrypted connection to obtain source file) from https://www.openssl.org/source (e.g. openssl-1.0.1c.tar.gz)
  • Either start MSYS-shell, or start MSYS2-shell:
    • Start a MSYS shell command prompt (C:.0\msys.bat)
    • Or, start MSYS2 shell command prompt (C:2\msys2_shell.bat)
      • See inside this MSYS2 page, how to prepare MSYS2 with build/compile related toolchains, tools & dependencies
  • Extract source tar.gz using MSYS tar or MSYS2 tar (and ignore the symlink warnings)
    • don't use 7zip or other apps, since they fail to set up any symlinks! tar will also complain about symlinks, but compilation will still succeed.
  • Unzip/decompress source:
$ tar xvzf openssl-1.0.1c.tar.gz
$ cd openssl-1.0.1c
  • Check that gcc is in PATH, otherwise add it: change below command to match with your-side directory's exact name & letter-case & location:
    • If using MinGW-builds toolchain (which is usually located outside of MSYS or MSYS2), then execute this in MSYS or in MSYS2:
$ export PATH="/c/Mingw-builds/bin:$PATH"
    • If using MSYS shell, and if you have installed MinGW toolchain into C:32 directory, then execute this:
$ export PATH="/c/mingw32/bin:$PATH"
    • If using MSYS2 shell, execute this, if you are building for 32bit:
$ export PATH="/c/msys2/mingw32/bin:$PATH"
#or if using 64-bit MSYS2

$ export PATH="/c/msys64/mingw32/bin:$PATH"
    • If using MSYS2 shell, execute this, if you are building for 64bit:
$ export PATH="/c/msys32/mingw64/bin:$PATH"
#or if using 64-bit MSYS2

$ export PATH="/c/msys64/mingw64/bin:$PATH"
  • Check that you have your PATH correctly setup
# should point to a mingw distribution of gcc

$ which gcc
/c/msys64/mingw32/bin/gcc
  • for MinGW (32 bit) do:
$ ./Configure --prefix=$PWD/dist no-idea no-mdc2 no-rc5 shared mingw
  • for MinGW-w64 do:
$ ./Configure --prefix=$PWD/dist no-idea no-mdc2 no-rc5 shared mingw64
  • Compile & install:
$ make depend && make && make install

Errors

  • If you run into
perl asm/sha1-x86_64.pl mingw64 > sha1-x86_64.s
gcc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include -D_WINDLL -DOPENSSL_PIC -DOPENSSL_TH
READS -D_MT -DDSO_WIN32 -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE -DOPENSSL_IA
32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM-
DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c -o sha1-x86_
64.o sha1-x86_64.s
sha1-x86_64.s: Assembler messages:
sha1-x86_64.s:1824: Warning: end of file not at end of a line; newline inserted
sha1-x86_64.s:2183: Error: number of operands mismatch for `rol'
make[2]: '''* [sha1-x86_64.o] Error 1'''
make[2]: Leaving directory `/d/dev/tmp/openssl-1.0.1c/crypto/sha'
make[1]:'''* [subdirs] Error 1'''
make[1]: Leaving directory `/d/dev/tmp/openssl-1.0.1c/crypto'
make: '''* [build_crypto] Error 1'''

check out http://openssl.6102.n7.nabble.com/Compile-error-with-MinGW-w64-td36657.html * Use perl inside MSYS or inside MSYS2 * or change crypto/perlasm/x86_64-xlate.pl as mentioned in the e-mail thread.

Using it

  • If you are using cmd.exe (Cmd-shell), then: add the bin, include, lib folders to your compilation environment:
C:\> set PATH=PATH;C:\openssl1.0.1c\dist\bin
C:\> set INCLUDE=INCLUDE;C:\openssl1.0.1c\dist\include
C:\> set LIB=LIB;C:\openssl1.0.1c\dist\lib
  • If you are using MSYS2/MSYS-shell, then: add the bin, include, lib folders to your compilation environment:
$ export PATH="$PATH:/c/openssl-1.0.1c/dist/bin"
$ export INCLUDE="$INCLUDE:/c/openssl-1.0.1c/dist/include"
$ export LIB="$LIB:/c/openssl-1.0.1c/dist/lib"

When you now run Qt's configure.exe openssl should be detected, and Qt links against the libraries.