|
|
@ -3,29 +3,28 @@ WINDOWS BUILD NOTES |
|
|
|
|
|
|
|
|
|
|
|
Below are some notes on how to build Bitcoin Core for Windows. |
|
|
|
Below are some notes on how to build Bitcoin Core for Windows. |
|
|
|
|
|
|
|
|
|
|
|
Most developers use cross-compilation from Ubuntu to build executables for |
|
|
|
The options known to work for building Bitcoin Core on Windows are: |
|
|
|
Windows. This is also used to build the release binaries. |
|
|
|
|
|
|
|
|
|
|
|
* On Linux using the [Mingw-w64](https://mingw-w64.org/doku.php) cross compiler tool chain. Ubuntu Trusty 14.04 is recommended |
|
|
|
Building on Ubuntu Trusty 14.04 is recommended. |
|
|
|
and is the platform used to build the Bitcoin Core Windows release binaries. |
|
|
|
At the time of writing the Windows Subsystem for Linux installs Ubuntu Xenial 16.04. The default cross |
|
|
|
* On Windows using [Windows |
|
|
|
compiler package for Ubuntu Xenial does not produce working executables for some of the bitcoin applications. |
|
|
|
Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about) and the Mingw-w64 cross compiler tool chain. |
|
|
|
It is possible to build on Ubuntu Xenial by installing the cross compiler packages from |
|
|
|
|
|
|
|
Ubuntu Zesty, see the steps below. |
|
|
|
Other options which may work but which have not been extensively tested are (please contribute instructions): |
|
|
|
Building on Ubuntu Zesty 17.04 up to 17.10 has been verified to work. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
While there are potentially a number of ways to build on Windows (for example using msys / mingw-w64), |
|
|
|
* On Windows using a POSIX compatibility layer application such as [cygwin](http://www.cygwin.com/) or [msys2](http://www.msys2.org/). |
|
|
|
using the Windows Subsystem For Linux is the most straightforward. If you are building with |
|
|
|
* On Windows using a native compiler tool chain such as [Visual Studio](https://www.visualstudio.com). |
|
|
|
another method, please contribute the instructions here for others who are running versions |
|
|
|
|
|
|
|
of Windows that are not compatible with the Windows Subsystem for Linux. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Compiling with Windows Subsystem For Linux |
|
|
|
Installing Windows Subsystem for Linux |
|
|
|
------------------------------------------- |
|
|
|
--------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
With Windows 10, Microsoft has released a new feature named the [Windows |
|
|
|
With Windows 10, Microsoft has released a new feature named the [Windows |
|
|
|
Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about). This |
|
|
|
Subsystem for Linux (WSL)](https://msdn.microsoft.com/commandline/wsl/about). This |
|
|
|
feature allows you to run a bash shell directly on Windows in an Ubuntu-based |
|
|
|
feature allows you to run a bash shell directly on Windows in an Ubuntu-based |
|
|
|
environment. Within this environment you can cross compile for Windows without |
|
|
|
environment. Within this environment you can cross compile for Windows without |
|
|
|
the need for a separate Linux VM or server. |
|
|
|
the need for a separate Linux VM or server. Note that while WSL can be installed with |
|
|
|
|
|
|
|
other Linux variants, such as OpenSUSE, the following instructions have only been |
|
|
|
|
|
|
|
tested with Ubuntu. |
|
|
|
|
|
|
|
|
|
|
|
This feature is not supported in versions of Windows prior to Windows 10 or on |
|
|
|
This feature is not supported in versions of Windows prior to Windows 10 or on |
|
|
|
Windows Server SKUs. In addition, it is available [only for 64-bit versions of |
|
|
|
Windows Server SKUs. In addition, it is available [only for 64-bit versions of |
|
|
@ -50,10 +49,15 @@ After the bash shell is active, you can follow the instructions below, starting |
|
|
|
with the "Cross-compilation" section. Compiling the 64-bit version is |
|
|
|
with the "Cross-compilation" section. Compiling the 64-bit version is |
|
|
|
recommended but it is possible to compile the 32-bit version. |
|
|
|
recommended but it is possible to compile the 32-bit version. |
|
|
|
|
|
|
|
|
|
|
|
Cross-compilation |
|
|
|
Cross-compilation for Ubuntu and Windows Subsystem for Linux |
|
|
|
------------------- |
|
|
|
------------------------------------------------------------ |
|
|
|
|
|
|
|
|
|
|
|
These steps can be performed on, for example, an Ubuntu VM. The depends system |
|
|
|
At the time of writing the Windows Subsystem for Linux installs Ubuntu Xenial 16.04. The Mingw-w64 package |
|
|
|
|
|
|
|
for Ubuntu Xenial does not produce working executables for some of the Bitcoin Core applications. |
|
|
|
|
|
|
|
It is possible to build on Ubuntu Xenial by installing the cross compiler packages from Ubuntu Zesty, see the steps below. |
|
|
|
|
|
|
|
Building on Ubuntu Zesty 17.04 up to 17.10 has been verified to work. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The steps below can be performed on Ubuntu (including in a VM) or WSL. The depends system |
|
|
|
will also work on other Linux distributions, however the commands for |
|
|
|
will also work on other Linux distributions, however the commands for |
|
|
|
installing the toolchain will be different. |
|
|
|
installing the toolchain will be different. |
|
|
|
|
|
|
|
|
|
|
@ -94,6 +98,18 @@ Ubuntu Zesty 17.04 <sup>[2](#footnote2)</sup>: |
|
|
|
|
|
|
|
|
|
|
|
Once the tool chain is installed the build steps are common: |
|
|
|
Once the tool chain is installed the build steps are common: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Note that for WSL the Bitcoin Core source path MUST be somewhere in the default mount file system, for |
|
|
|
|
|
|
|
example /usr/src/bitcoin, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail. |
|
|
|
|
|
|
|
This means you cannot use a directory that located directly on the host Windows file system to perform the build. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The next three steps are an example of how to acquire the source in an appropriate way. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cd /usr/src |
|
|
|
|
|
|
|
sudo git clone https://github.com/bitcoin/bitcoin.git |
|
|
|
|
|
|
|
sudo chmod -R a+rw bitcoin |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Once the source code is ready the build steps are below. |
|
|
|
|
|
|
|
|
|
|
|
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var |
|
|
|
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var |
|
|
|
cd depends |
|
|
|
cd depends |
|
|
|
make HOST=x86_64-w64-mingw32 |
|
|
|
make HOST=x86_64-w64-mingw32 |
|
|
@ -112,6 +128,16 @@ For Ubuntu Xenial 16.04, Ubuntu Zesty 17.04 and Windows Subsystem for Linux <sup |
|
|
|
|
|
|
|
|
|
|
|
sudo update-alternatives --config i686-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix. |
|
|
|
sudo update-alternatives --config i686-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Note that for WSL the Bitcoin Core source path MUST be somewhere in the default mount file system, for |
|
|
|
|
|
|
|
example /usr/src/bitcoin, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail. |
|
|
|
|
|
|
|
This means you cannot use a directory that located directly on the host Windows file system to perform the build. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The next three steps are an example of how to acquire the source in an appropriate way. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cd /usr/src |
|
|
|
|
|
|
|
sudo git clone https://github.com/bitcoin/bitcoin.git |
|
|
|
|
|
|
|
sudo chmod -R a+rw bitcoin |
|
|
|
|
|
|
|
|
|
|
|
Then build using: |
|
|
|
Then build using: |
|
|
|
|
|
|
|
|
|
|
|
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var |
|
|
|
PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var |
|
|
@ -139,16 +165,16 @@ way. This will install to `c:\workspace\bitcoin`, for example: |
|
|
|
Footnotes |
|
|
|
Footnotes |
|
|
|
--------- |
|
|
|
--------- |
|
|
|
|
|
|
|
|
|
|
|
<a name="footnote1">1</a>: There is currently a bug in the 64 bit mingw-w64 cross compiler packaged for WSL/Ubuntu Xenial 16.04 that |
|
|
|
<a name="footnote1">1</a>: There is currently a bug in the 64 bit Mingw-w64 cross compiler packaged for WSL/Ubuntu Xenial 16.04 that |
|
|
|
causes two of the bitcoin executables to crash shortly after start up. The bug is related to the |
|
|
|
causes two of the bitcoin executables to crash shortly after start up. The bug is related to the |
|
|
|
-fstack-protector-all g++ compiler flag which is used to mitigate buffer overflows. |
|
|
|
-fstack-protector-all g++ compiler flag which is used to mitigate buffer overflows. |
|
|
|
Installing the mingw-w64 packages from the Ubuntu 17 distribution solves the issue, however, this is not |
|
|
|
Installing the Mingw-w64 packages from the Ubuntu 17 distribution solves the issue, however, this is not |
|
|
|
an officially supported approach and it's only recommended if you are prepared to reinstall WSL/Ubuntu should |
|
|
|
an officially supported approach and it's only recommended if you are prepared to reinstall WSL/Ubuntu should |
|
|
|
something break. |
|
|
|
something break. |
|
|
|
|
|
|
|
|
|
|
|
<a name="footnote2">2</a>: Starting from Ubuntu Xenial 16.04 both the 32 and 64 bit mingw-w64 packages install two different |
|
|
|
<a name="footnote2">2</a>: Starting from Ubuntu Xenial 16.04 both the 32 and 64 bit Mingw-w64 packages install two different |
|
|
|
compiler options to allow a choice between either posix or win32 threads. The default option is win32 threads which is the more |
|
|
|
compiler options to allow a choice between either posix or win32 threads. The default option is win32 threads which is the more |
|
|
|
efficient since it will result in binary code that links directly with the Windows kernel32.lib. Unfortunately, the headers |
|
|
|
efficient since it will result in binary code that links directly with the Windows kernel32.lib. Unfortunately, the headers |
|
|
|
required to support win32 threads conflict with some of the classes in the C++11 standard library in particular std::mutex. |
|
|
|
required to support win32 threads conflict with some of the classes in the C++11 standard library in particular std::mutex. |
|
|
|
It's not possible to build the bitcoin code using the win32 version of the mingw-w64 cross compilers (at least not without |
|
|
|
It's not possible to build the bitcoin code using the win32 version of the Mingw-w64 cross compilers (at least not without |
|
|
|
modifying headers in the bitcoin source code). |
|
|
|
modifying headers in the bitcoin source code). |
|
|
|