静态链接 Casablanca/CPPREST SDK
Statically linking Casablanca/CPPREST SDK
我正在尝试创建一个基于 Windows 的 VC++ DLL(在 VS 2015 中),它静态 links 到 Casablanca CPPREST SDK。也就是说,我想要一个包含 CPP REST 库和我的代码的 DLL 输出。
我已经提到了这个线程,但是它看起来相当过时(并且已经损坏 links):
https://katyscode.wordpress.com/2014/04/01/how-to-statically-link-the-c-rest-sdk-casablanca/
我尝试从 GitHub 下载 Casablanca 存储库并编译生成 lib 文件的 "cpprestsdk140.static" 项目。问题是当 link 将它与我的项目一起使用时,我得到了许多未解决的外部问题。
许多人评论了上述 URL 中未解决的 link 错误。 Github 上也有许多帖子,人们说他们不能 link 使用静态库的简单项目。
有没有人有一套清晰的步骤可以帮助解决这个问题?
好的,我汇集了来自各个线程的一些建议,为了成功 link 到 CPP REST 静态库,我有以下一组步骤:
- 从 https://github.com/Microsoft/cpprestsdk 下载卡萨布兰卡 SDK。 (通过 GIT 克隆或 Zip)。
- 打开VS解决方案,右击cpprestsdk140.static.
的属性
- 在C++ -> 预处理器定义中,添加CPPREST_EXCLUDE_COMPRESSION。完整列表如下所示:_NO_ASYNCRTIMP;_ASYNCRT_EXPORT;_PPLX_EXPORT;WIN32;_MBCS;_USRDLL;CPPREST_EXCLUDE_COMPRESSION;%(PreprocessorDefinitions)
- 在Librarian -> General -> Additional dependencies,添加crypt32.lib;winhttp.lib;(见https://github.com/Microsoft/cpprestsdk/issues/344)
- 按确定,然后构建 cpprestsdk140.static 项目。您将在 Binaries 目录中得到一个 libcpprest140d_2_9.lib(用于调试版本)。
现在,在你自己的项目中:
- 如果您以前使用过 CPPREST 的 Nuget 版本,请首先确保删除 Nuget 包管理器中的所有引用。
- 右键单击您的项目属性并转到 C++ -> 其他包含目录 并输入 CPPREST SDK 包含文件的路径.他们目前居住在cpprestsdk\Release\include.
- 现在转到 C++ -> 预处理器定义,添加 _NO_ASYNCRTIMP (参见 https://github.com/Microsoft/cpprestsdk/issues/124)。
- 转到 Linker -> Input 并添加 libcpprest140d_2_9.lib(以及与路径名,如果适用)。对于发布版本,您似乎还需要添加 crypt32.lib;winhttp.lib.
- 构建您的项目,希望一切顺利 ;)
我希望这对某人有帮助(我相信它会)!
除了 Simple Guy 所说的之外,您可能需要将 bcrypt.lib 添加到 Linker->Input->Additional Dependencies,因为 CPPRest 中的 OAuth1.obj 文件依赖于其中一些函数.
对 Simple Guy 的回答的补充:
如果您在项目中使用 http_listener
class,您可能需要 Httpapi.lib
来修复链接器错误。
而且我还想提出一种更简单的方法来编译静态 cpprestdk 库。
我已经成功地使用它在 VS2017 中构建了我的项目。
- 从 https://github.com/Microsoft/vcpkg
安装 vcpkg
使用以下命令编译 cpprestsdk:
第一步。vcpkg install cpprestsdk:x86-windows-static
第 2 步。vcpkg install cpprestsdk:x64-windows-static
从您的项目设置开始,按照 Simple Guy 回答的第二部分进行操作。此外,使用我上面的建议和 BobC 来修复链接器错误。
尽情享受吧!
我正在尝试创建一个基于 Windows 的 VC++ DLL(在 VS 2015 中),它静态 links 到 Casablanca CPPREST SDK。也就是说,我想要一个包含 CPP REST 库和我的代码的 DLL 输出。
我已经提到了这个线程,但是它看起来相当过时(并且已经损坏 links):
https://katyscode.wordpress.com/2014/04/01/how-to-statically-link-the-c-rest-sdk-casablanca/
我尝试从 GitHub 下载 Casablanca 存储库并编译生成 lib 文件的 "cpprestsdk140.static" 项目。问题是当 link 将它与我的项目一起使用时,我得到了许多未解决的外部问题。
许多人评论了上述 URL 中未解决的 link 错误。 Github 上也有许多帖子,人们说他们不能 link 使用静态库的简单项目。
有没有人有一套清晰的步骤可以帮助解决这个问题?
好的,我汇集了来自各个线程的一些建议,为了成功 link 到 CPP REST 静态库,我有以下一组步骤:
- 从 https://github.com/Microsoft/cpprestsdk 下载卡萨布兰卡 SDK。 (通过 GIT 克隆或 Zip)。
- 打开VS解决方案,右击cpprestsdk140.static. 的属性
- 在C++ -> 预处理器定义中,添加CPPREST_EXCLUDE_COMPRESSION。完整列表如下所示:_NO_ASYNCRTIMP;_ASYNCRT_EXPORT;_PPLX_EXPORT;WIN32;_MBCS;_USRDLL;CPPREST_EXCLUDE_COMPRESSION;%(PreprocessorDefinitions)
- 在Librarian -> General -> Additional dependencies,添加crypt32.lib;winhttp.lib;(见https://github.com/Microsoft/cpprestsdk/issues/344)
- 按确定,然后构建 cpprestsdk140.static 项目。您将在 Binaries 目录中得到一个 libcpprest140d_2_9.lib(用于调试版本)。
现在,在你自己的项目中:
- 如果您以前使用过 CPPREST 的 Nuget 版本,请首先确保删除 Nuget 包管理器中的所有引用。
- 右键单击您的项目属性并转到 C++ -> 其他包含目录 并输入 CPPREST SDK 包含文件的路径.他们目前居住在cpprestsdk\Release\include.
- 现在转到 C++ -> 预处理器定义,添加 _NO_ASYNCRTIMP (参见 https://github.com/Microsoft/cpprestsdk/issues/124)。
- 转到 Linker -> Input 并添加 libcpprest140d_2_9.lib(以及与路径名,如果适用)。对于发布版本,您似乎还需要添加 crypt32.lib;winhttp.lib.
- 构建您的项目,希望一切顺利 ;)
我希望这对某人有帮助(我相信它会)!
除了 Simple Guy 所说的之外,您可能需要将 bcrypt.lib 添加到 Linker->Input->Additional Dependencies,因为 CPPRest 中的 OAuth1.obj 文件依赖于其中一些函数.
对 Simple Guy 的回答的补充:
如果您在项目中使用 http_listener
class,您可能需要 Httpapi.lib
来修复链接器错误。
而且我还想提出一种更简单的方法来编译静态 cpprestdk 库。 我已经成功地使用它在 VS2017 中构建了我的项目。
- 从 https://github.com/Microsoft/vcpkg 安装 vcpkg
使用以下命令编译 cpprestsdk:
第一步。
vcpkg install cpprestsdk:x86-windows-static
第 2 步。
vcpkg install cpprestsdk:x64-windows-static
从您的项目设置开始,按照 Simple Guy 回答的第二部分进行操作。此外,使用我上面的建议和 BobC 来修复链接器错误。
尽情享受吧!