Wt  4.11.1
Installation: Windows

Before you start

Note
Most people on Windows will be using prebuilt binaries. So most of the configuration here is not necessary.

Before you start building Wt, you need to ensure you have the proper tools set up to do so. We base the minimum versions of dependencies on a roughly 5-year sliding window and a selection of commonly used operating systems. This means that Wt will be guaranteed to build using:

  • Visual Studio 2017
Of course this will also require some pieces of software to ensure that Wt can build. Currently, Wt should be built with: Note that this doesn't mean that you can't compile Wt on older versions of these operating systems. We will just not go out of our way to maintain compatibility with them.

You may be able to compile Wt on older operating systems if you use a different toolset. For example, Red Hat supplies toolsets that allow you to use a more recent compiler on older RHEL releases.

Core dependencies

These dependencies are required to build Wt. Wt relies on functionality of these libraries to implement functionality or to actually be able to build. Boost is the only actual library that Wt depends on. There are a few configuration options when building with Boost that can be configured, and some are required. The options are the following:

  • BOOST_ROOT/BOOST_PREFIX: either of these options can (or rather, should) be used if Boost is not installed in a default location. It points to the Boost installation path.
  • Boost_ADDITIONAL_VERSIONS: a list defining the viable Boost versions. You may need to append your version here. This will mainly be the case for custom installations that do not use the expected versioning system.
  • Boost_USE_STATIC_LIBS: can be defined on Windows, indicating whether Boost ought to be linked statically or dynamically.
More information on including Boost can be found here.

Optional dependencies

The following dependencies are optional. They are used for specific functionality that Wt offers, and are often hidden behind certain compilation flags. The current list consists of:

Dependency Configuration flag Default value Details
OpenSSL CONNECTOR_HTTP ON Used to support the HTTPS protocol in the web client, and the HTTPS protocol in the built-in wthttpd connector. This will only be used of the wthttpd connector is actually build. This is managed by the build flag CONNECTOR_HTTP, which can be ON or OFF. If OpenSSL is not installed in a default location, its prefix needs to be specified with SSL_PREFIX (as a path).
Haru Free PDF Library ENABLE_HARU ON Used to provide support for painting to PDF (WPdfImage). This can be managed by using the ENABLE_HARU flag (ON/OFF). If Haru is not installed in a default location, its prefix needs to be specified with HARU_PREFIX (as a path). The library can be configured to link statically with HARU_DYNAMIC (where OFF means static link).

Wt relies on an older verion of HARU, below 2.4.0. Something does not quite compile right with higher versions. We may look at including a more recent version (see: #11704). Additionally, there seems to be a rendering bug with higher versions (2.4.0-2.4.3), where floating point values are not correctly rendered (see: #11833).
GraphicsMagick WT_WRASTERIMAGE_IMPLEMENTATION none Used for supporting painting to raster images (PNG, GIF, ...) (WRasterImage), which are rendered server-side. This configures in what way images can be rendered in Wt. This is managed by the WT_WRASTERIMAGE_IMPLEMENTATION flag. This flag is a string, and can take the values GraphicsMagick/Direct2D/none. Where GraphicsMagick will require a graphicsmagick installation. If this is not found, it needs to be specified using GM_PREFIX (as a path). Generally speaking GraphicsMagick is a Linux way to handle images, whereas Direct2D is the Windows way.
Pango ENABLED_PANGO ON Used for improved font support in the WPdfImage and WRasterImage paint devices. It can be configured by ENABLED_PANGO (ON/OFF). This will allow for more fonts to be used by Wt.
PostgreSQL ENABLE_POSTGRES ON Used for the PostgreSQL backend for Wt::Dbo (Dbo::backend::Postgres). This will allow Wt to use PostgreSQL as its Dbo backend. This can be configured using ENABLE_POSTGRES (ON/OFF). If PostgreSQL is not installed in a default location, its prefix needs to be specified with POSTGRES_PREFIX (as a path).
Firebird ENABLE_FIREBIRD ON Used for the Firebird backend for Wt::Dbo (Dbo::backend::Firebird). This will allow Wt to use Firebird as its Dbo backend. This can be configured using ENABLE_FIREBIRD (ON/OFF). If Firebird is not installed in a default location, its prefix needs to be specified with FIREBIRD_PREFIX (as a path). By default Wt includes a IBPP implementation (a library for accessing Firebird databases). If one wished to use a custom IBPP implementation, this will require IBPP_SRC_DIRECTORY, which can be found here, together with USE_SYSTEM_IBPP being set to ON.
the C API for MySQL (mysqlclient)
or the
MariaDB connector library
ENABLE_MYSQL ON Used for the MySQL/MariaDB backend for Wt::Dbo (Dbo::backend::MySQL). This will allow Wt to use MySQL/MariaDB as its Dbo backend. This can be configured using ENABLE_MYSQL (ON/OFF). If MySQL / MariaDB is not installed in a default location, its prefix needs to be specified with MYSQL_PREFIX (as a path).
unixODBC ENABLE_MSSQLSERVER ON Used for the SQL Server backend for Wt::Dbo (Dbo::backend::MSSQLServer). This will allow Wt to use MSSQL as its Dbo backend. This can be configured using ENABLE_MSSQLSERVER (ON/OFF). As the name indicates, this is a Windows backend. But it can also be installed on Linux systems (see: Microsoft's documentation for more information).
libunwind ENABLE_UNWIND OFF Used for the saving of backtraces in exceptions (useful for debugging). This can be configured by ENABLE_UNWIND (ON/OFF). If libunwind is not installed in a default location, its prefix needs to be specified with UNWIND_PREFIX (as a path).
zlib HTTP_WITH_ZLIB/td> Depends Used for the compression of data over HTTP or using WebSockets. This will only affect the wthttpd connector. This can be configured by HTTP_WITH_ZLIB (ON/OFF). If zlib is not installed in a default location, its prefix needs to be specified with ZLIB_PREFIX (as a path).
Wt Installation

Wt Installation instructions for Windows

This page lists the instructions for building and installing Wt on Windows. It is organized in 3 sections:

Overview

Wt for Windows uses the built-in web server connector or the ISAPI connector. The fastcgi connector is not supported. The built-in web server is more convenient during development and is easier to setup than the ISAPI connector. It is also designed for production environments, where it is often used in combination with a reverse proxy server. To use the built-in server, you have to link your projects against libwt and libwthttp. To use the ISAPI connector, you have to link against libwtisapi instead of libwthttp.

The prebuilt binaries for Visual Studio include all necessary and optional dependencies, and enable all features of Wt and can be downloaded from the releases page on GitHub.

We strongly recommend to use libraries which are all built using the same compiler and the same runtime configuration (/MT, /MD, /MTd or /MDd) to avoid incompatibilities with the C runtime libraries. Mixing CRTs is NOT recommended, the zlib DLL FAQ clearly explains why and what you should do about it (in short: use prebuilt libraries for the exact same compiler as you use, and if those are not available, rebuild the dependency libraries from the sources).


Step by step instructions to build and install the Wt library

Up to date instructions are located on the Wt wiki page: Installing Wt on MS Windows

Instructions on how to use the ISAPI connector for deployment under IIS are also available on the wiki page: ISAPI on Microsoft IIS

Trying the examples (or your own Wt application) using wthttpd

1. Run the example 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=0.0.0.0 --http-port=8080 --deploy-path=/hello --docroot=.

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

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-x.y.z/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 examples with --help to see the most recent list of available options):

General options:
  -h [ --help ]                         produce help message
  -t [ --threads ] arg (=-1)            number of threads (-1 indicates that
                                        num_threads from wt_config.xml is to be
                                        used, which defaults to 10)
  --servername arg (=diffie)            servername (IP address or DNS name)
  --docroot arg                         document root for static files,
                                        optionally followed by a
                                        comma-separated list of paths with
                                        static files (even if they are within a
                                        deployment path), after a ';'

                                        e.g. --docroot=".;/favicon.ico,/resourc
                                        es,/style"

  --approot arg                         application root for private support
                                        files; if unspecified, the value of the
                                        environment variable $WT_APP_ROOT is
                                        used, or else the current working
                                        directory
  --errroot arg                         root for error pages
  --accesslog arg                       access log file (defaults to stdout),
                                        to disable access logging completely,
                                        use --accesslog=-
  --no-compression                      do not use compression
  --deploy-path arg (=/)                location for deployment
  --session-id-prefix arg               prefix for session IDs (overrides
                                        wt_config.xml setting)
  -p [ --pid-file ] arg                 path to pid file (optional)
  -c [ --config ] arg                   location of wt_config.xml; if
                                        unspecified, the value of the
                                        environment variable $WT_CONFIG_XML is
                                        used, or else the built-in default
                                        (c:/witty/wt_config.xml) is tried, or
                                        else built-in defaults are used
  --max-memory-request-size arg (=131072)
                                        threshold for request size (bytes), for
                                        spooling the entire request to disk, to
                                        avoid DoS
  --gdb                                 do not shutdown when receiving Ctrl-C
                                        (and let gdb break instead)
  --static-cache-control                Cache-Control header value for static
                                        files (defaults to max-age=3600)

HTTP/WebSocket server options:
  --http-address arg                    IPv4 (e.g. 0.0.0.0) or IPv6 Address
                                        (e.g. 0::0). You must specify either
                                        this option or --https-address (or
                                        both)
  --http-port arg (=80)                 HTTP port (e.g. 80)

HTTPS/Secure WebSocket server options:
  --https-address arg                   IPv4 (e.g. 0.0.0.0) or IPv6 Address
                                        (e.g. 0::0). You must specify either
                                        this option or --http-address (or both)
  --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"
  --ssl-enable-v3                       Switch on SSLv3 support (not
                                        recommended; disabled by default)
  --ssl-client-verification arg (=none) The verification mode for client
                                        certificates.
                                        This is either 'none', 'optional' or
                                        'required'. When 'none', the server
                                        will not request a client certificate.
                                        When 'optional', the server will
                                        request a certificate, but the client
                                        does not have to supply one. With
                                        'required', the connection will be
                                        terminated if the client does not
                                        provide a valid certificate.
  --ssl-verify-depth arg (=1)           Specifies the maximum length of the
                                        server certificate chain.

  --ssl-ca-certificates arg             Path to a file containing the
                                        concatenated trusted CA certificates,
                                        which can be used to authenticate the
                                        client. The file should contains a a
                                        number of PEM-encoded certificates.

  --ssl-cipherlist arg                  List of acceptable ciphers for SSL.
                                        This list is passed as-is to the SSL
                                        layer, so see openssl for the proper
                                        syntax. When empty, the default
                                        acceptable cipher list will be used.
                                        Example cipher list string:
                                        "TLSv1+HIGH:!SSLv2"

  --ssl-prefer-server-ciphers arg (=0)  By default, the client's preference is
                                        used for determining the cipher that is
                                        choosen during a SSL or TLS handshake.
                                        By enabling this option, the server's
                                        preference will be used.