Statically linking Casablanca/CPPREST SDK

OK, I pooled together a number of suggestions from the various threads and have the following set of steps in order to successfully link to the CPP REST static library:

  1. Download Casablanca SDK from https://github.com/Microsoft/cpprestsdk. (via GIT Clone or Zip).
  2. Open the VS solution and right-click on the properties of the cpprestsdk140.static.
  3. In the C++ -> Preprocessor definitions, add CPPREST_EXCLUDE_COMPRESSION. The full list looks like: _NO_ASYNCRTIMP;_ASYNCRT_EXPORT;_PPLX_EXPORT;WIN32;_MBCS;_USRDLL;CPPREST_EXCLUDE_COMPRESSION;%(PreprocessorDefinitions)
  4. In Librarian -> General -> Additional dependencies, add crypt32.lib;winhttp.lib; (See https://github.com/Microsoft/cpprestsdk/issues/344)
  5. Press OK, then build the cpprestsdk140.static project. You will end up with a libcpprest140d_2_9.lib (for Debug build) in the Binaries directory.

Now, in your own project:

  1. If you have previously used the Nuget version of CPPREST, firstly ensure you remove any references in the Nuget package manager.
  2. Right-click your project properties and go to C++ -> Additional Include Directories and enter the path for the CPPREST SDK include files. They currently reside in cpprestsdk\Release\include.
  3. Now go to C++ -> Preprocessor definitions, add _NO_ASYNCRTIMP (See https://github.com/Microsoft/cpprestsdk/issues/124).
  4. Go to Linker -> Input and add libcpprest140d_2_9.lib (along with pathname, if applicable). For the release version, it appears you also need to add crypt32.lib;winhttp.lib.
  5. Build your project and hopefully all is well ;)

I hope this helps someone (I'm sure it will)!


One more addition to the Simple Guy's answer: If you use http_listener class in your project it is likely you will need Httpapi.lib to fix linker errors.

And also I want to propose an easier way to compile a static cpprestdk library. I've successfully used it to build my project in VS2017.

  1. install vcpkg from https://github.com/Microsoft/vcpkg
  2. Compile cpprestsdk using following commands:

    Step 1. vcpkg install cpprestsdk:x86-windows-static

    Step 2. vcpkg install cpprestsdk:x64-windows-static

  3. Follow the second part of Simple Guy's answer starting from your project settings. Additionally, use my advice from above and BobC to fix linker errors.

Enjoy!


In addition to what Simple Guy said, you will probably need to add bcrypt.lib to the Linker->Input->Additional Dependencies since the OAuth1.obj file in CPPRest depends on some of those functions.