静态链接Casablanca / CPPREST SDK

时间:2017-07-04 12:13:40

标签: visual-c++ cpprest-sdk

我正在尝试创建一个基于Windows的VC ++ DLL(在VS 2015中),它静态链接到Casablanca CPPREST SDK。也就是说,我想要一个包含CPP REST库以及我的代码的DLL输出。

我已经提到了这个帖子,但它似乎过时了(并且链接断了):

https://katyscode.wordpress.com/2014/04/01/how-to-statically-link-the-c-rest-sdk-casablanca/

我曾尝试从GitHub下载Casablanca repo并编译产生lib文件的“cpprestsdk140.static”项目。问题是当我将它与我的项目链接时,我得到了许多未解决的外部因素。

许多人对上述网址中未解决的链接错误发表了评论。 Github上还有许多线程,人们说他们无法将简单项目与静态库链接起来。

有没有人有一套明确的步骤可以帮助解决这个问题?

3 个答案:

答案 0 :(得分:8)

好的,我汇集了来自各个线程的一些建议,并且为了成功链接到CPP REST静态库,我们有以下一系列步骤:

  1. https://github.com/Microsoft/cpprestsdk下载Casablanca SDK。 (通过GIT Clone或Zip)。
  2. 打开VS解决方案,右键单击 cpp态dk140.static的属性。
  3. C ++ - >中预处理程序定义,添加 CPPREST_EXCLUDE_COMPRESSION 。完整列表如下所示: _NO_ASYNCRTIMP; _ASYNCRT_EXPORT; _PPLX_EXPORT; WIN32; _MBCS; _USRDLL; CPPREST_EXCLUDE_COMPRESSION;%(PreprocessorDefinitions)
  4. Librarian - > 一般 - > 其他依赖项,添加 crypt32.lib; winhttp.lib; (请参阅https://github.com/Microsoft/cpprestsdk/issues/344
  5. 按确定,然后构建 cpprestsdk140.static 项目。您将在 Binaries 目录中找到 libcpprest140d_2_9.lib (用于Debug构建)。
  6. 现在,在你自己的项目中:

    1. 如果您以前使用过Nuget版本的CPPREST,请首先确保删除Nuget包管理器中的任何引用。
    2. 右键单击项目属性,然后转到 C ++ - > 其他包含目录并输入CPPREST SDK包含文件的路径。它们目前位于 cpprestsdk \ Release \ include
    3. 现在转到 C ++ - > 预处理程序定义,添加 _NO_ASYNCRTIMP (请参阅https://github.com/Microsoft/cpprestsdk/issues/124)。
    4. 转到链接器 - > 输入并添加 libcpprest140d_2_9.lib (以及路径名,如果适用)。对于发布版本,您似乎还需要添加 crypt32.lib; winhttp.lib
    5. 建立你的项目,希望一切顺利;)
    6. 我希望这有助于某人(我确定会这样做)!

答案 1 :(得分:6)

Simple Guy的答案还有一个补充: 如果在项目中使用http_listener类,则可能需要Httpapi.lib来修复链接器错误。

我还想提出一种更简单的方法来编译静态cpprestdk库。 我已成功使用它在VS2017中构建我的项目。

  1. https://github.com/Microsoft/vcpkg
  2. 安装vcpkg
  3. 使用以下命令编译cpprestsdk: vcpkg install cpprestsdk:x86-windows-static vcpkg install cpprestsdk:x64-windows-static
  4. 从项目设置开始,关注Simple Guy的第二部分答案。另外使用我上面的建议和BobC修复链接器错误。
  5. 享受!

答案 2 :(得分:5)

除了Simple Guy所说的,你可能还需要将bcrypt.lib添加到Linker-> Input-> Additional Dependencies,因为CPPRest中的OAuth1.obj文件依赖于其中的一些功能。