Installing Wt on MS Windows » History » Revision 39

Revision 38 (Charles Brockman, 04/16/2012 06:09 AM) → Revision 39/57 (Charles Brockman, 07/08/2012 11:57 PM)

h1. Installing Wt on MS Windows 


 This HOWTO assumes you have a clean Windows system and want to use Wt 2.1 or newer series. We start with the download of the compiler and system libraries. We continue to explain where the dependency libraries can be found and how they are installed. Then the configuration of Wt is covered, and finally we build Wt and run the examples. 

 Unlike Linux distributions, Windows has no easy package managers for developers. To avoid compiling dependencies for half a day before you can use Wt, we strongly reduced the minimal dependencies that Wt requires. Since Wt 2.1, Boost and CMake are the only required dependencies. We will explain two approaches to set up your environment: the quick method, using binary packages, and the thorough method, in which you compile more dependencies, but which will also result in a Wt that supports compression, SSL, etc. 

 These instructions have been tested both on Windows XP and Windows Vista. These instructions are valid for all 2.1 and newer versions of Wt. 


 h2. Setting up your Compiler  

 You need Microsoft Visual Studio 2005 or newer, Professional or Express Edition (C++). The difference is that the former is payware, whereas the latter is a free, reduced version of MSVC. The good news is that the Express Edition is perfect to compile Wt. 

 For more information about the compiler, see [[Installing MSVC]]. 

 Note for MSVC 2010 SP1 users: "FIX: Visual C++ compilers are removed when you upgrade Visual Studio 2010 Professional or Visual Studio 2010 Express to Visual Studio 2010 SP1 if Windows SDK v7.1 is installed": 


 h2. The Quick Method  

 The quick method installs Wt without any optional components (compression-over-HTTP and support for HTTPS) 


 h3. Download Dependencies  

 * Install Boost. Either download binaries from BoostPro, or compile your own: 
 > * Download the BoostPro installer for version 1.36 or newer (there are problems with boost 1.46 and 1.47 with Wt < 3.1.11) from "boost-consulting": (You might need to register in order to download the BoostPro installer.) Run it and install all types for all libraries for the correct version of your MSVC compiler at a location of your choice. 
 > * To compile Boost yourself, download the Boost sources from Boost has a tendancy to frequently change its installation instructions, but for some time it has been: 
 bjam --layout=versioned --toolset=msvc-10.0 variant=debug threading=multi link=static runtime-link=shared install 
 bjam --layout=versioned --toolset=msvc-10.0 variant=release threading=multi link=static runtime-link=shared install 
 * Download the "cmake 2.8": (cmake > 2.4.6 required) Windows Installer. Run the installer to install CMake. 
 * Download Wt from the "download page": Unzip it somehwere (c:/projects/witty/wt-3.x.x). 


 h3. Configuring Wt  

 * Start the CMake GUI from the Start->CMake menu 
 * At the top of the window that opens, fill in or browse to the source and binary directories: 
 ** Where is the source code: code is: c:\projects\witty\wt-3.x.x 
 ** * Where to build the binaries: c:\projects\witty\wt-3.x.x\build (or whatever, but choose something different than the source directory) 
 * Click Configure 
 * Select Visual Studio 2005 or 2008 or 2010 

 You will probably get errors about Boost not being found. That is normal, as you did not yet tell where the library is located. Set the BOOST_PREFIX variable to match your configuration. For example: this variables: 
 * BOOST_PREFIX = c:/Program Files/boost/boost_1_36_0 Files/boost/boost_1_36_0. (Adapt for your version; just c:/Boost if you compiled Boost yourself.) 

 Another error you might encounter in CMake is "The C compiler "cl" is not able to compile a simple test program." This means that your Visual Studio won't find 'cmd' as it isn't configured correctly. 

 What you must do is change the MSVC MSVS options (Tools menu > Options > Project and Solutions > VC++ Directories) to ensure that 

 *      $(SystemRoot) 

 *      $(SystemRoot)\System32 

 *      $(SystemRoot)\System32\wbem 

 *      are specified BEFORE $(PATH). 


 Press 'Configure' again. A few messages about the FCGI and wthttpd connector may pop up; just click Ok. A few new configuration fields (in red) will have popped up; leave them unchanged and press 'Configure' once more. If all went well, you have now no red fields left and the configuration is complete. Press Generate (in cmake <2.8, this button is called 'Ok') and your MSVC solution files will be generated. 


 h3. Compiling Wt  

 Open the WT.sln solution in the 'Where to build the binaries' directory of the previous step. Press F7, or select the projects you want to build manually. You should not get any compile or link errors. 


 h3. Running the Examples  

 In the MSVC IDE right-click on the example project you want to run, and select 'Properties'. In Configuration Properties->Debugging, set the Command Arguments to 


 --http-address= --http-port=8080 --deploy-path=/hello --docroot=. 

 Wt builds static versions of all libraries by default and links against static Boost libraries by default. If you would choose to build dynamic libraries in the future (see remarks at the bottom of this page), the easiest way to locate the dependency DLLs is to append their location to the PATH variable. In order to do so, change the Environment field to contain a PATH directive: 
 PATH=c:/libraries/lib;c:/Boost/lib;<path to wt.dll>;<path to wthttp.dll> 

 Right-click on the example project you want to run and select 'Set as Startup Project'. Press F5 (Run). This will start the httpd server listening on all local interfaces, on port 8080, and you may browse the example at 

 Examples that need extra files to run should be executed from their source directory in order to find their dependency files (icons, CSS files, etc). Watch for 404 errors in Wt's output. To do so, set the 'Working directory' for the example to wt-2.x.x/examples/ExampleName. Some examples (e.g. the Wt home page) need the 'resources' directory to work correctly. Copy the wt-2.x.x/resources to the example's source directory to solve this problem. Other examples (such as the Charts example) may require the installation of ExtJs. See the Wt reference manual for more information on how to obtain and install ExtJs. 

 These are all the command-line options that are available (run the wt application with --help to see the newer options available in your version): 
 General options: 
   -h [ --help ]                produce help message 
   -t [ --threads ] arg (=10) number of threads 
   --docroot arg                document root for static files 
   --no-compression             do not compress dynamic text/html and text/plain  
   --deploy-path arg (=/)       location for deployment 

 HTTP server options: 
   --http-address arg      IPv4 (e.g. or IPv6 Address (e.g. 0::0) 
   --http-port arg (=80) HTTP port (e.g. 80) 

 HTTPS server options: 
   --https-address arg       IPv4 (e.g. or IPv6 Address (e.g. 0::0) 
   --https-port arg (=443) HTTPS port (e.g. 443) 
   --ssl-certificate arg     SSL server certificate chain file 
                           e.g. "/etc/ssl/certs/vsign1.pem" 
   --ssl-private-key arg     SSL server private key file 
                           e.g. "/etc/ssl/private/company.pem" 
   --ssl-tmp-dh arg          File for temporary Diffie-Hellman parameters 
                           e.g. "/etc/ssl/dh512.pem" 


 h3. Installing Wt  

 After compilation, right-click on 'INSTALL' and select 'build'. This will copy the Wt header files and libraries to c:/Program Files/WT. 


 h2. Optional Components  

 This involves installing SSL, zlib and some other components. After installation as described here, rerun CMake. These instructions are valid for Wt > 2.1.0. 


 h3. Preparations  

 In order to avoid setting paths to small libraries separately, we create a repository where we store them all. CMake will find this repository without assistance if you call it 'c:\libraries'. 
 mkdir c:\libraries 
 mkdir c:\libraries\lib 
 mkdir c:\libraries\include 


 h3. Download and Build zlib  

 Zlib is an optional dependency of Wt, which can be controlled by the CMake flag HTTP_WITH_ZLIB. With zlib, Wt compresses all http traffic by default, saving bandwidth. 

 * Get zlib from ("direct link for version 1.2.3":  
 * Open zlib-1.2.3\contrib\vstudio\vc8\zlibvc.sln 
 * Select solution 'Debug', architecture 'Win32' (in the toolbar) 
 * Right-click on project 'zlibstat', select Properties. In 'Configuration Properties'->'C/C++'->'Code Generation'->'Runtime Libraries' and set it to 'Multi-threaded Debug DLL (/MDd)'. Close the properties window. 
 * Do the same with project 'zlibvc' 
 * Right-click on project 'zlibstat', and select 'Build' to build it. 
 * Select solution 'Release', architecture 'Win32'  
 * Right-click on project 'zlibstat', select Properties. In 'Configuration Properties'->'C/C++'->'Code Generation'->'Runtime Libraries' and set it to 'Multi-threaded DLL (/MD)'. Close the properties window. 
 * Do the same with project 'zlibvc'* Right-click on project 'zlibstat', and select 'Build' to build it. 

 The results are now located in the x86 directory. Copy them into our central repository location, renaming the debug library in the process: 
 cp contrib\vstudio\vc8\x86\ZlibStatDebug\zlibstat.lib c:\libraries\lib\zlibstatd.lib 
 cp contrib\vstudio\vc8\x86\ZlibStatRelease\zlibstat.lib c:\libraries\lib\ 

 We also need zlib.h and zconf.h header files. 
 cp zlib.h zconf.h c:\libraries\include 


 h3. OpenSSL  

 You need OpenSSL if you want to use Wt to support https mode. Grab a pre-compiled binary from, install it in the default path (c:\OpenSSL) and Wt's CMake files will find and use OpenSSL. (Verify that HTTP_WITH_SSL is enabled.) 

 h3. GraphicsMagick 

 The generic build instructions for GraphicsMagick are found here: 

 In order for GraphicsMagick to work with your version of MSVC, it is strongly recommended to build it from the sources. Follow the instructions on the GraphicsMagick site: 
 * Run @VisualMagick/configure/configure.exe@ to create a .sln file 
 * Make sure to select the default 'Dynamic Multi-threaded DLL runtimes' and 'Use X11 stubs to prevent use of X windows' 
 * Open @VisualMagick/VisualStaticMT.sln@ in MSVC and press F7. Make sure you select the 'Release' or 'Debug' build as appropriate. For me, the UTIL_IMDisplay project fails to compile, which is unimportant. 

 While configuring Wt, point GM_PREFIX to the toplevel directory of GraphicsMagick (i.e. the one containing subdirectories VisualMagick and magick). Press Configure, and CMake should find the header files and compiled binaries. 

 Important: when executing a binary linked to a Wt library that uses GraphicsMagick, the GraphicsMagick DLLs must be found by Windows. This means that they should be in c:/windows/system32, or in the current working directory, or that you should add the VisualMagick/bin directory to your path. Otherwise your application will complain that it cannot find the required DLLs to start up. 

 In order to render fonts, verify that your imagemagick fonts are correctly configured. For example, on my computer I had to remove the include for type-ghostscript.mgk in the VisualMagick/bin/type.mgk file to have any fonts rendered at all. 

 h2. Important Remarks  

 By default, Wt will build static libraries that are statically linked against Boost. While this is convenient for quick deployment (the example binaries do not require DLLs to run, so you do not have to set their PATHs correctly), many people prefer to use DLLs, not in the least because your Wt applications will link much faster. 

 Two CMake options control how Wt is built, and what kind of Boost libraries it uses: 
 * BOOST_DYNAMIC: set to true to build against Boost DLLs. Set to false to link to static Boost libraries. 
 * SHARED_LIBS: set to true to build a Wt DLL, set to false to build a static Wt library. 

 If you double-checked the library directories but still get build errors such as "cannot open file 'libboost_signals-vc90-mt-gd-1_35.lib'", you probably did not install or build the static Boost files, while the BOOST_DYNAMIC option is set to false. Similarly, when the error indicates that boost_signals-vc90-mt-gd-1_35.lib is not found, you probably haven't installed or built the Boost DLLs, while BOOST_DYNAMIC is set to true. 

 Note that when you build a static Wt library (SHARED_LIBS is false), you will get these Boost-related linker errors only when you compile the examples. 

 h2. Support for Microsoft IIS 

 Wt works well with Microsoft IIS as ISAPI extensions. See the [[ISAPI on Microsoft IIS]] wiki for more information on how to deploy Wt in IIS.