Difference between revisions of "WxHaskell/Windows"

From HaskellWiki
Jump to navigation Jump to search
(→‎Installing wxWidgets: Added info for Haskell Platform 7.10.2-a, about some error message and about GCC version required for 64 bit)
Line 65: Line 65:
There will be many linker warnings for old versions of GCC, those are solved in a more recent GCC version.
There will be many linker warnings for old versions of GCC, those are solved in a more recent GCC version.
The result is now in C:\Libs\wxWidgets\%WXWIDGETS_VERSION%\lib\gcc_dll
The result is now in %WXWIN%\lib\gcc_dll
If you get a message like
If you get a message like

Revision as of 21:50, 3 September 2015

wxWidgets 3.0 and wxHaskell >= 0.92

wxHaskell binds to wxWidgets, so wxWidgets must be installed first. We will install wxWidgets with the GCC that is packaged with GHC, to prevent incompatibilities between object/archive files.
You need mingw32-make.exe from MinGW and sh.exe from MSYS in your search path. If you do not have it yet, install GIT. Download wx-config.exe (a new version for wxWidgets > 3.0) and copy it somewhere into your search path.

Installing wxWidgets

Install the wxWidgets source in C:\Libs\wxWidgets\3.0.2
Commands to compile wxWidgets and wxHaskell with Haskell Platform 2014.2.0.0 (newer versions of GHC can be used as well, but need different directories in the search path):

Cd %WXWIN%\build\msw

Edit config.gcc so that the following values are set:

BUILD ?= release

If you want to compile 64 bit binaries, set the following as well (64 bit compilation requires GCC > 4.6, which comes with GHC > 7.10):

# Standard flags for CC 
CFLAGS ?= -m64

# Standard flags for C++ 
CXXFLAGS ?= -m64

# Standard preprocessor flags (common for CC and CXX) 

Edit ..\..\include\wx\msw\setup.h, change line 788 from




Set the environment variables

  • for Haskell Platform 2014.2.0.0:
Set HASKELL_COMPILER_DIR=C:\Program Files\Haskell Platform\2014.2.0.0
Set PATH=%HASKELL_COMPILER_DIR%\mingw\libexec\gcc\mingw32\4.5.2\;%HASKELL_COMPILER_DIR%\lib\extralibs\bin;%HASKELL_COMPILER_DIR%\bin;%HASKELL_COMPILER_DIR%\mingw\bin;%path%
  • for Haskell Platform 7.10.2-a:
Set HASKELL_COMPILER_DIR=C:\Program Files\Haskell Platform\7.10.2-a
Set Path=%HASKELL_COMPILER_DIR%\lib\extralibs\bin;%HASKELL_COMPILER_DIR%\bin;%HASKELL_COMPILER_DIR%\mingw\bin;%path%

Clean and build wxWidgets, using the MinGW shell:

sh -c "mingw32-make -j -f makefile.gcc clean"
sh -c "mingw32-make -j -f makefile.gcc all"

There will be many linker warnings for old versions of GCC, those are solved in a more recent GCC version. The result is now in %WXWIN%\lib\gcc_dll

If you get a message like

'c:/Program' is not recognized as an internal or external command,

there is probably a space in the path to an executable. It is better to install the Haskel Platform in a directory without spaces in the full name, but there is another solution: use the old fashioned short names, like:


(Use the MS-DOS command dir /x to see the correct short names)

If you get a message about denied access: if you already compiled and ran a wxHaskell program, the wxWidgets DLLs are loaded and cannot be overwritten. Restart the computer.

Installing wxHaskell

Using the environment variables HASKELL_COMPILER_DIR and WXWIN from the previous subsection:

Set WXCFG=gcc_dll\mswu
Set CPLUS_INCLUDE_PATH=%HASKELL_COMPILER_DIR%\mingw\lib\gcc\mingw32\4.5.2\include\c++;%WXWIN%\include
Set LIBRARY_PATH=%WXWIN%\lib\gcc_lib;%HASKELL_COMPILER_DIR%\mingw\lib\

From GitHub

You can get wxHaskell from Hackage and from GitHub; to install the most recent version of wxHaskell from the repository:

Cd <Where\you\want\to\install\wxHaskell>
git clone https://github.com/wxHaskell/wxHaskell.git
Cd wxHaskell
cabal install .\wxdirect
cabal install .\wxc
cabal install .\wxcore
cabal install .\wx

Make sure that all below mentioned DLLs are in the search path and try a sample program:

Cd samples\wxcore
ghc BouncingBalls

Click with the left mouse button on the window to create new bouncing balls.

From Hackage

To install the wxHaskell from Hackage:

cabal install wx

wxWidgets 3.0 and wxHaskell 0.91.x

Windows Haskell Platform wxWidgets
8.1 2013.2.0.0 3.0.1
8.1 2014.2.0.0 3.0.1, 3.0.2


  • If you want to install from Hackage: MinGW 5.1.6 and MSYS 1.0.11 (a recent version of MinGW will result in incompatible DLLs). You must select the C++ compiler and MinGW-make options when installing MinGW. Add the full path to directories MinGW\bin and msys\1.0\bin to your search path. If you install the most recent version from GitHub, use the same version of GCC as the one that comes with GHC (use command gcc --version), to prevent compatibility problems.

Environment variables:

  • GHC_VERSION: 7.8.3 (some recent version)
  • WXC_VERSION: (preferably the most recent version, see Hackage)
  • WXWIN: C:\wxWidgets-3.0.2
  • WXCFG: gcc_dll\mswu
  • PATH: (add these) %WXWIN%\lib\gcc_dll;%WXWIN%;%APPDATA%\cabal\bin;%APPDATA%\cabal\i386-windows-ghc-%GHC_VERSION%\wxc-%WXC_VERSION%

If you are using a cabal sandbox, you must add the following to your search path:

  • .cabal-sandbox\bin

to ensure that wxdirect.exe can be found.


  1. Make sure, that the GCC from the MinGW package is used for compilation of wxWidgets, by adding its directory to the start of the search path, with a command like:
    Set path=C:\MinGW\bin;%path%
  2. Download wxWidgets 3.0.2 source
  3. Extract to C:\wxWidgets-3.0.2
  4. Build wxWidgets-3.0.2
    Edit wxwidgets-src-dir\build\msw\config.gcc so that the following values are set:
     SHARED ?= 1
     BUILD ?= release

    Then (in cmd.exe, not bash):

     cd wxwidgets-src-dir\build\msw
     mingw32-make -f makefile.gcc
  5. Download wx-config.exe (a new version for wxWidgets > 3.0) and copy it somewhere into your search path, for instance via
    copy wx-config.exe %CABAL_DIR%\bin
  6. Make sure, that the GCC that comes with GHC is used for the rest of the procedure, by adding its directory to the search path, with a command like:
    Set path=C:\Haskell\Haskell Platform\2014.2.0.0\mingw\bin\;%path%
  7. Install the wxHaskell libraries
  8. To get the most recent version (using Git):
    git clone git://github.com/wxHaskell/wxHaskell.git
    cd wxHaskell\wxdirect
    cabal update
    cabal install
    cd ..\wxc
    cabal install
    cd ..\wxcore
    cabal install
    cd ..\wx
    cabal install

    Or, for the Hackage version:

    cabal update
    cabal install wx

    Or, if you want to install the dependencies separately:

    cabal update
    cabal install wxdirect
    cabal install wxc
    cabal install wxcore
    cabal install wx
  9. Install the DLLs described in the next subsection


In order to run a wxHaskell application, Windows must be able to find the following wxWidgets DLLs (see Search Path Used by Windows to Locate a DLL):

  • wxWidgets-x.y.z\lib\gcc_dll\*.dll

The following file can be found in directory wxc\dist\build\, after building package wxc in directory wxc:

  • wxc.dll (be sure to recompile and copy this one when you compile your application with a new compiler)

Furthermore, the following DLLs need to be in the search path (these can be found in directory "Haskell Platform\2014.2.0.0\mingw\bin\", or in ghc-7.10.1\mingw\bin\ if you installed the compiler only (change revision as needed)):

  • libgcc_s_dw2-1.dll
  • libstdc++-6.dll
  • mingwm10.dll

Some wxHaskell applications also require the following DLLs:

  • uuid.dll
  • perl510.dll
  • libapr-1.dll
  • libapriconv-1.dll
  • libaprutil-1.dll

These DLLs can be obtained by installing XAMPP 1.7.4; the DLLs are in the directories:

  • xampp\perl\site\lib\auto\APR\UUID
  • xampp\perl\bin
  • xampp\apache\bin

If there are still DLLs missing, you can find out which, using cygcheck from the Cygwin project. Note, that you will get problems if you have both MinGW and Cygwin in your search path; it is best to specify the full path to cygcheck.exe, or copy cygcheck.exe to some location in the search path. Sample command:

 C:\programs\cygwin\bin\cygcheck.exe .\h.exe

(the .\ must be specified)

wxWidgets 2.8 and wxHaskell 0.13.x

Follow SkyTreeBird's guide. It which walks you through the basic steps

  • wx-config
  • wxPack
  • setting up environment variables
  • cabal install wx

Note that the best way to refer to WxWidgets in your PATH is probably to use the WXWIN variable that you set, eg. %WXWIN%\lib\gcc_dll

The guide has been tested with the following configurations. Others may work too:

Windows Haskell Platform wxWidgets
XP 2010.2.0.0 2.8.10
7 2011.2.0.1 2.8.12


In order to run a wxHaskell application, the following DLLs must be in the search path:

  • mingwm10.dll; this can be found in directory "Haskell Platform\2012.2.0.0\mingw\bin\", or in ghc-7.4.2\mingw\bin\ if you installed just the compiler (change revision as needed)
  • wxmsw28u_gcc_custom.dll

Troubleshooting installation with cabal

These remarks refer to wx-0.13.2 and Haskell Platform 2011.4.0.0 on Windows 7.

Cabal package wx depends on wxcore which depends on wxdirect. By default cabal installs on a per user base, thus wxdirect.exe will be installed to c:\Users\<YOUR NAME>\AppData\Roaming\cabal\bin\. This folder must be in your PATH for cabal install wxcore to succeed.

Package wxcore-0.13.2 does not work well with wx-config revision 21 2006-10-19 (downloaded from here on Feb 2nd 2012). If cabal install wxcore fails with an output containing "Usage: wx-config [options]" try this:

  • cabal unpack wxcore
  • cd wxcore-0.13.2
  • edit Setup.hs and comment out/remove the line containing "wx-config" ["--version"]
  • runhaskell.exe Setup.hs configure --user
  • runhaskell.exe Setup.hs build
  • runhaskell.exe Setup.hs install

Finally call cabal install wx.

See also