Statically linking Casablanca/CPPREST SDK

前端 未结 3 948
谎友^
谎友^ 2021-01-12 13:22

I am trying to create a Windows-based VC++ DLL (in VS 2015) that statically links to the Casablanca CPPREST SDK. That is, I would like a single DLL output which contains th

相关标签:
3条回答
  • 2021-01-12 13:56

    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)!

    0 讨论(0)
  • 2021-01-12 14:02

    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!

    0 讨论(0)
  • 2021-01-12 14:08

    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.

    0 讨论(0)
提交回复
热议问题