Building with Visual C++, prerequisites | |
======================================= | |
This document describes how to compile, build and install curl and libcurl | |
from sources using the Visual C++ build tool. To build with VC++, you will | |
of course have to first install VC++. The minimum required version of | |
VC is 6 (part of Visual Studio 6). However using a more recent version is | |
strongly recommended. | |
VC++ is also part of the Windows Platform SDK. You do not have to install | |
the full Visual Studio or Visual C++ if all you want is to build curl. | |
The latest Platform SDK can be downloaded freely from: | |
https://developer.microsoft.com/en-us/windows/downloads/sdk-archive | |
If you are building with VC6 then you will also need the February 2003 | |
Edition of the Platform SDK which can be downloaded from: | |
https://www.microsoft.com/en-us/download/details.aspx?id=12261 | |
If you wish to support zlib, openssl, c-ares, ssh2, you will have to download | |
them separately and copy them to the deps directory as shown below: | |
somedirectory\ | |
|_curl-src | |
| |_winbuild | |
| | |
|_deps | |
|_ lib | |
|_ include | |
|_ bin | |
It is also possible to create the deps directory in some other random | |
places and tell the Makefile its location using the WITH_DEVEL option. | |
Building straight from git | |
========================== | |
When you check out code git and build it, as opposed from a released source | |
code archive, you need to first run the "buildconf.bat" batch file (present | |
in the source code root directory) to set things up. | |
Building with Visual C++ | |
======================== | |
Open a Visual Studio Command prompt: | |
Using the 'Developer Command Prompt for VS <version>' menu entry: | |
where version is the Visual Studio version. The developer prompt at default | |
uses the x86 mode. It is required to call Vcvarsall.bat to setup the prompt | |
for the machine type you want, using Vcvarsall.bat. | |
This type of command prompt may not exist in all Visual Studio versions. | |
For more information, check: | |
https://docs.microsoft.com/en-us/dotnet/framework/tools/developer-command-prompt-for-vs | |
https://docs.microsoft.com/en-us/cpp/build/how-to-enable-a-64-bit-visual-cpp-toolset-on-the-command-line | |
Using the 'VS <version> <platform> <type> Command Prompt' menu entry: | |
where version is the Visual Studio version, platform is e.g. x64 | |
and type Native of Cross platform build. This type of command prompt | |
may not exist in all Visual Studio versions. | |
See also: | |
https://msdn.microsoft.com/en-us/library/f2ccy3wt.aspx | |
Once you are in the console, go to the winbuild directory in the Curl | |
sources: | |
cd curl-src\winbuild | |
Then you can call nmake /f Makefile.vc with the desired options (see below). | |
The builds will be in the top src directory, builds\ directory, in | |
a directory named using the options given to the nmake call. | |
nmake /f Makefile.vc mode=<static or dll> <options> | |
where <options> is one or many of: | |
VC=<6,7,8,9,10,11,12,14,15> - VC versions | |
WITH_DEVEL=<path> - Paths for the development files (SSL, zlib, etc.) | |
Defaults to sibbling directory deps: ../deps | |
Libraries can be fetched at https://windows.php.net/downloads/php-sdk/deps/ | |
Uncompress them into the deps folder. | |
WITH_SSL=<dll or static> - Enable OpenSSL support, DLL or static | |
WITH_NGHTTP2=<dll or static> - Enable HTTP/2 support, DLL or static | |
WITH_MBEDTLS=<dll or static> - Enable mbedTLS support, DLL or static | |
WITH_CARES=<dll or static> - Enable c-ares support, DLL or static | |
WITH_ZLIB=<dll or static> - Enable zlib support, DLL or static | |
WITH_SSH2=<dll or static> - Enable libSSH2 support, DLL or static | |
WITH_PREFIX=<dir> - Where to install the build | |
ENABLE_SSPI=<yes or no> - Enable SSPI support, defaults to yes | |
ENABLE_IPV6=<yes or no> - Enable IPv6, defaults to yes | |
ENABLE_IDN=<yes or no> - Enable use of Windows IDN APIs, defaults to yes | |
Requires Windows Vista or later | |
ENABLE_WINSSL=<yes or no> - Enable native Windows SSL support, defaults to yes | |
GEN_PDB=<yes or no> - Generate Program Database (debug symbols for release build) | |
DEBUG=<yes or no> - Debug builds | |
MACHINE=<x86 or x64> - Target architecture (default is x86) | |
CARES_PATH=<path to cares> - Custom path for c-ares | |
MBEDTLS_PATH=<path to mbedTLS> - Custom path for mbedTLS | |
NGHTTP2_PATH=<path to HTTP/2> - Custom path for nghttp2 | |
SSH2_PATH=<path to libSSH2> - Custom path for libSSH2 | |
SSL_PATH=<path to OpenSSL> - Custom path for OpenSSL | |
ZLIB_PATH=<path to zlib> - Custom path for zlib | |
Static linking of Microsoft's C RunTime (CRT): | |
============================================== | |
If you are using mode=static nmake will create and link to the static build of | |
libcurl but *not* the static CRT. If you must you can force nmake to link in | |
the static CRT by passing RTLIBCFG=static. Typically you shouldn't use that | |
option, and nmake will default to the DLL CRT. RTLIBCFG is rarely used and | |
therefore rarely tested. When passing RTLIBCFG for a configuration that was | |
already built but not with that option, or if the option was specified | |
differently, you must destroy the build directory containing the configuration | |
so that nmake can build it from scratch. | |
Building your own application with a static libcurl | |
=================================================== | |
When building an application that uses the static libcurl library on Windows, | |
you must define CURL_STATICLIB. Otherwise the linker will look for dynamic | |
import symbols. | |
Legacy Windows and SSL | |
====================== | |
When you build curl using the build files in this directory the default SSL | |
backend will be WinSSL (Windows SSPI, more specifically Schannel), the native | |
SSL library that comes with the Windows OS. WinSSL in Windows <= XP is not able | |
to connect to servers that no longer support the legacy handshakes and | |
algorithms used by those versions. If you will be using curl in one of those | |
earlier versions of Windows you should choose another SSL backend like OpenSSL. |