Difference between revisions of "WindowsInstall"

From GNU Radio
Jump to navigation Jump to search
(improve first download link to point to the latest and greatest, instead of the out-of-date binaries from previous versions.)
Line 97: Line 97:

Follow the command prompts.
Follow the command prompts.
=== WSL | Ubuntu === 
Enable WSL from windows features.
Install Ubuntu from Microsoft Store.   
Using the Ubuntu terminal, install gnuradio as you would on linux [https://wiki.gnuradio.org/index.php/InstallingGR#Ubuntu_PPA_Installation] 
Install additional package "libgtk-3-dev" 
  sudo apt install libgtk-3-dev
Install Xming [https://sourceforge.net/projects/xming/] as WSL do not come with X server. 
Launch Xming (default settings would do) 
Edit '''bashrc''' to setup the display by adding the following line at the bottom of the file 
  export DISPLAY=:0 
Restart the Ubuntu terminal and run 

== Known Windows Build Issues ==
== Known Windows Build Issues ==

Revision as of 10:38, 3 November 2020

Windows Installation

Current Windows Status

Binary installers for 64-bit Windows 7/8/10 are now available here. These include all dependencies for Windows, a custom python distro, commonly used SDR drivers, and several OOT blocks.

There is also a build available at [1] that includes GnuRadio, Pothos, CubicSDK and other tools.

Installing GNU Radio and USRP on Windows is becoming more routine. Please report any success or failures. Patches and enhancements are especially welcome!

Windows Porting Issues

Considerable effort has been put into making the GNU Radio code portable among various operating systems, but there are several reasons why it cannot be "simply" compiled and run under Windows:

  • The build and install procecures are based on Linux scripts and tools
  • Several third-party libraries are used, each with its own, often system-dependent, installation procedure
  • Most GNU Radio applications must interface to hardware (e.g., a sound card or USRP) which require system-dependent drivers and installation procedures
  • Because GNU Radio is written as an extension to Python, there are potential problems on Windows if different runtime libraries are used for GNU Radio and Python

The following sections show how these issues can be addressed.

Installation Options

GNU Radio is designed to be flexible. It has a number of modules, capabilities, and options that can be enabled or disabled to suit the needs of the user, and the user can add custom blocks or modules to the system.

To support this flexibility, it comes with a set of files and scripts to be used with GNU software build tools (sh, make, autoconf, automake, etc.). These tools use Linux-like commands and filenames that are not normally available on Windows systems.

Fortunately, we are not the first to face this problem, and several solutions exist. These are presented in order of increasing difficulty:

Building on Windows with Native Tools

Ettus Application note [2] describes how to build from source. Similar is a post at [3] for OOT modules.

Powershell scripts are now available at https://www.github.com/gnieboer/gnuradio_windows_build_scripts that fully automate the build process for GNURadio A few build dependencies are required (MSVC 2015, Git, Doxygen, CMake, Perl, Wix) but all are free. The script has two options:

  1. Build all dependencies from source (including python itself)
  2. Download a prebuilt custom dependency package and then build only GNURadio and a few OOT modules on top.

The binary installers described above are built with these scripts. They ensure that all dependencies are built with the same toolchain against the same runtime libraries, and handle the patches and configuration "tweaks" needed to build them on Windows.
If option 1 is desired, note that to build scipy, the non-free Intel Fortran compiler is required, gfortran cannot build objects that can link with MSVC C objects. If you do not have said compiler, the scripts will download pre-compiled wheels instead.

More information on the build process is available on the GitHub repo readme, and also at http://www.gcndevelopment.com/gnuradio.

GNURadio 3.6 has also been compiled on Windows using native tools as well (see http://voltronics.blogspot.com/2013/01/gnu-radio-windows-build-guide.html and https://lists.gnu.org/archive/html/discuss-gnuradio/2013-08/msg00284.html)

More helpful tips on dependency version information have been reported:


MinGW (http://www.mingw.org/) provides GNU compilers and Window-specific header files for compiling native Windows applications.
MSYS (http://www.mingw.org/msys.shtml) is a companion set of Linux-like commands, shell, and build tools.
MinGW does not include a Linux programming interface; programs should be smaller and faster than with Cygwin (in theory), but will require more Windows-specific code.
MSYS is intended primarily as a build environment, making it more compact than Cygwin.

Because there is no Linux API emulation, GNU Radio built with MinGW should be used with standard Windows versions of Python and the third-party libraries.
MinGW does not provide as much support as Cygwin for installing third-party libraries, but in many cases precompiled binaries are available.

For detailed installation instructions using MinGW and MSYS see Installing GNU Radio with MinGW.


Cygwin (http://www.cygwin.com/) is a Linux-like environment for Windows.
It provides the Linux-like shell, file naming, and build tools we need and also makes it easy to install many of the third-party libraries required by GNU Radio. It also provides a Linux programming interface (API); this is not required by GNU Radio, but it lets us use the better-tested Linux versions of some functions.

Because the Linux API uses its own C runtime library, it is best to use Cygwin versions of Python and the third-party libraries when building GNU Radio with Cygwin.

For detailed installation instructions using Cygwin see Installing GNU Radio with Cygwin.


To quote from the [|https://chocolatey.org/ Chocolately homepage]: Chocolatey NuGet is a Machine Package Manager, somewhat like apt-get, but built with Windows in mind..

There are packages for gnuradio (and it's dependencies) available in a separate repository (currently the best known source is: https://github.com/ariovistus/chocolatey-packages)

To install, open an Administrative command line session and run:

iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))

Now you need to install a source which has the recipes for gnuradio and dependants. The easiest method is to clone the chocolately-packages from the github repository listed above (https://github.com/ariovistus/chocolatey-packages), then add the local source from within an Administrative command line session:

choco source add -name gnuradio -source C:\<path-to>\chocolatey-packages

Create the numpy package:

cd <path-to>\chocolatey-package\numpy

Create the gnuradio package:

cd <path-to>\chocolatey-package\gnuradio

Now install the gnuradio package:

choco install gnuradio

Follow the command prompts.

WSL | Ubuntu

Enable WSL from windows features.

Install Ubuntu from Microsoft Store.

Using the Ubuntu terminal, install gnuradio as you would on linux [4]

Install additional package "libgtk-3-dev"

 sudo apt install libgtk-3-dev

Install Xming [5] as WSL do not come with X server.

Launch Xming (default settings would do)

Edit bashrc to setup the display by adding the following line at the bottom of the file

 export DISPLAY=:0  

Restart the Ubuntu terminal and run


Known Windows Build Issues

So far, we have workarounds for all reported problems:

  • I got the following error after a clean install "This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.". I fixed this by finding qwindows.dll on my PC (for me it was in C:\Program Files\GNURadio-3.8\bin\platforms\), creating a new directory C:\Program Files\GNURadio-3.8\bin\plugins\platforms, and copying the 4 DLLs to C:\Program Files\GNURadio-3.8\bin\plugins\platforms (I had to create the "....plugins\platforms\" sub-directory). I'm sure there's a more elegant fix, but this seems to work.