Project

General

Profile

Installing Wt on MS Windows » History » Version 21

Wim Dumon, 03/12/2010 06:48 PM

1 15 Pieter Libin
h1. Installing Wt on MS Windows
2 1 Pieter Libin
3
{{toc}}
4
5 16 Wim Dumon
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.
6 1 Pieter Libin
7 13 Pieter Libin
Unlike Linux distributions, Windows has no easy package managers for developers. To avoid that you're 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.
8 1 Pieter Libin
9 13 Pieter Libin
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.
10 1 Pieter Libin
11
12
h2. Setting up your compiler 
13
14 16 Wim Dumon
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.
15 1 Pieter Libin
16 16 Wim Dumon
For more information about the compiler, see [[Installing MSVC]].
17 1 Pieter Libin
18
19 13 Pieter Libin
h2. The Quick Method 
20 1 Pieter Libin
21 13 Pieter Libin
The quick method installs Wt without any optional components (compression-over-HTTP and support for HTTPS)
22 1 Pieter Libin
23
24 13 Pieter Libin
h3. Download Dependencies 
25 1 Pieter Libin
26 20 Wim Dumon
* Download the BoostPro installer for version 1.36 or newer from "boost-consulting":http://www.boost-consulting.com/products/free (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.
27 13 Pieter Libin
* Download the "cmake 2.6":http://www.cmake.org/ (cmake > 2.4.6 required) Windows Installer. Run the installer to install cmake.
28 17 Wim Dumon
* Download Wt from the "download page":http://www.webtoolkit.eu/wt/download. Unzip it somehwere (c:/projects/witty/wt-2.x.x).
29 1 Pieter Libin
30
31 13 Pieter Libin
h3. Configuring Wt 
32 1 Pieter Libin
33 13 Pieter Libin
* Start cmake from the Start->CMake menu
34
* Where the source code is: c:\projects\witty\wt-2.x.x
35 17 Wim Dumon
* Where to build the binaries: c:\projects\witty\wt-2.x.x\build (or whatever, but choose something different than the source directory)
36 13 Pieter Libin
* Click Configure
37
* Select Visual Studio 8 2005 or 2008
38 1 Pieter Libin
39 13 Pieter Libin
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 this variables:
40 20 Wim Dumon
* BOOST_DIR = c:/Program Files/boost/boost_1_36_0 (adapt for your version)
41 1 Pieter Libin
42 18 Anonymous
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.
43
44
What you must do is change MSVS options (Tools menu > Options > Project and Solutions > VC++ Directories) to ensure that
45
46
*    $(SystemRoot)
47
48
*    $(SystemRoot)\System32
49
50
*    $(SystemRoot)\System32\wbem
51
52
*    are specified BEFORE $(PATH).
53
54
55 21 Wim Dumon
Press 'Configure' again. A few messages about the FCGI and wthttpd connector may pop up; click Ok (in cmake 2.8, this button is called 'Generate'). 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 'Ok' and your MSVC solution files will be generated.
56 1 Pieter Libin
57
58
59 13 Pieter Libin
h3. Compiling Wt 
60 1 Pieter Libin
61 13 Pieter Libin
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.
62 1 Pieter Libin
63
64 13 Pieter Libin
h3. Running the examples 
65 1 Pieter Libin
66 13 Pieter Libin
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
67 1 Pieter Libin
68 13 Pieter Libin
 <pre>
69
--http-address=0.0.0.0 --http-port=8080 --deploy-path=/hello --docroot=.
70 1 Pieter Libin
 </pre>
71
72 13 Pieter Libin
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:
73
 <pre>
74
PATH=c:/libraries/lib;c:/Boost/lib;<path to wt.dll>;<path to wthttp.dll>
75
 </pre>
76 1 Pieter Libin
77 13 Pieter Libin
Right-click on the example project you want to run and select 'Set as Startup Project'. Press F5 (Run). This will start a httpd server listening on all local interfaces, on port 8080, and you may browse the example at http://127.0.0.1:8080/hello
78 1 Pieter Libin
79 13 Pieter Libin
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.
80 1 Pieter Libin
81 13 Pieter Libin
These are all the command-line options that are available:
82
 <pre>
83
General options:
84
  -h [ --help ]              produce help message
85
  -t [ --threads ] arg (=10) number of threads
86
  --docroot arg              document root for static files
87
  --no-compression           do not compress dynamic text/html and text/plain 
88
                             responses
89
  --deploy-path arg (=/)     location for deployment
90 1 Pieter Libin
91 13 Pieter Libin
HTTP server options:
92
  --http-address arg    IPv4 (e.g. 0.0.0.0) or IPv6 Address (e.g. 0::0)
93
  --http-port arg (=80) HTTP port (e.g. 80)
94 1 Pieter Libin
95 13 Pieter Libin
HTTPS server options:
96
  --https-address arg     IPv4 (e.g. 0.0.0.0) or IPv6 Address (e.g. 0::0)
97
  --https-port arg (=443) HTTPS port (e.g. 443)
98
  --ssl-certificate arg   SSL server certificate chain file
99
                          e.g. "/etc/ssl/certs/vsign1.pem"
100
  --ssl-private-key arg   SSL server private key file
101
                          e.g. "/etc/ssl/private/company.pem"
102
  --ssl-tmp-dh arg        File for temporary Diffie-Hellman parameters
103
                          e.g. "/etc/ssl/dh512.pem"
104
 </pre>
105 1 Pieter Libin
106
107
108 13 Pieter Libin
h3. Installing Wt 
109 1 Pieter Libin
110 13 Pieter Libin
After compilation, right-click on 'INSTALL' and select 'build'. This will copy Wt header files an libraries to c:/Program Files/WT.
111 1 Pieter Libin
112
113
114 13 Pieter Libin
h2. Optional components 
115
116
This involves installing SSL, zlib, and some other components. After installation as described here, rerun cmake so that it uses. These instructions are valid for Wt > 2.1.0.
117
118
119
h3. Preparations 
120
121
In order to avoid to set paths to small library separately, we create a repository where we store them all. CMake will find this repository without intervention if you call it 'c:\libraries'.
122 1 Pieter Libin
 <pre>
123 13 Pieter Libin
mkdir c:\libraries
124
mkdir c:\libraries\lib
125
mkdir c:\libraries\include
126 1 Pieter Libin
 </pre>
127
128
129 13 Pieter Libin
h3. Download and build zlib 
130 1 Pieter Libin
131 13 Pieter Libin
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.
132 1 Pieter Libin
133 13 Pieter Libin
* Get zlib from http://www.zlib.net/ ("direct link for version 1.2.3":http://www.gzip.org/zlib/zlib-1.2.3.tar.gz). 
134 1 Pieter Libin
* Open zlib-1.2.3\contrib\vstudio\vc8\zlibvc.sln
135 13 Pieter Libin
* Select solution 'Debug', architecture 'Win32' (in the toolbar)
136
* 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.
137
* Do the same with project 'zlibvc'
138
* Right-click on project 'zlibstat', and select 'Build' to build it.
139
* Select solution 'Release', architecture 'Win32' 
140
* 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.
141
* Do the same with project 'zlibvc'* Right-click on project 'zlibstat', and select 'Build' to build it.
142 10 Pieter Libin
143 13 Pieter Libin
Results are now located in the x86 directory. Copy them into our central repository location, renaming the debug library in the process:
144 1 Pieter Libin
 <pre>
145
cp contrib\vstudio\vc8\x86\ZlibStatDebug\zlibstat.lib c:\libraries\lib\zlibstatd.lib
146
cp contrib\vstudio\vc8\x86\ZlibStatRelease\zlibstat.lib c:\libraries\lib\
147 10 Pieter Libin
 </pre>
148 1 Pieter Libin
149
We also need zlib.h and zconf.h header files.
150
 <pre>
151
cp zlib.h zconf.h c:\libraries\include
152
 </pre>
153
154
155 13 Pieter Libin
h3. OpenSSL 
156 1 Pieter Libin
157 13 Pieter Libin
You need OpenSSL if you want to use Wt to support https mode. Grab a pre-compiled binary from http://www.openssl.org/related/binaries.html, 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).
158 1 Pieter Libin
159
160 13 Pieter Libin
h2. Important Remarks 
161 1 Pieter Libin
162 13 Pieter Libin
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 dll's, not in the least because your Wt applications will link much faster.
163 1 Pieter Libin
164 13 Pieter Libin
Two cmake options control how Wt is built, and what kind of boost libraries it uses:
165
* BOOST_DYNAMIC: set to true to build against boost dlls. Set to false to link to static boost libraries.
166
* SHARED_LIBS: set to true to build a Wt DLL, set to false to build a static Wt library.
167 1 Pieter Libin
168 13 Pieter Libin
When you double-checked the library directories but you 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.
169 10 Pieter Libin
170 13 Pieter Libin
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.