首页 > 解决方案 > 如何在VS项目中静态链接没有dll文件的cpprest?

问题描述

我终于将 Casablanca/CPPRESTSDK 与 VS17 链接起来,感谢这篇文章Statically linking Casablanca/CPPREST SDK和其他一些。但是现在我看到,当我启动项目时,出于某种原因,VS 会自动zlib1.dll SSLEAY32.dll LIBEAY32.dll在文件夹中生成 3 个 .exe DLL 文件,但我实际上是静态链接的,根本没有它们。我也有这些lib格式的文件vcpkg-master\installed\x86-windows-static\lib,我可以以某种方式使用它们而不是dll吗?

标签: c++visual-c++

解决方案


我有同样的问题。我有一个 Visual Studio 解决方案,其中项目在共享 DLL 中使用 MFC 并使用多线程 DLL 运行时库。我想静态链接到 cpprestsdk,而不需要分发三个额外的 DLL。/MT链接到 cpprestsdk 的静态版本不起作用:由于运行时库冲突( -多线程和/MD-多线程 DLL),我无法链接。我找不到使用/MD开关(多线程 DLL)但导出为库的预编译版本。所以我不得不自己编译。

我的解决方案:

  • 下载vcpkghttps://github.com/microsoft/vcpkg)。这是一个包 C 和 C++ 库包管理器。您将需要“引导”它。请参阅快速入门。
  • 为 cpprestsdk 安装必要的依赖项:`vcpkg install --triplet x86-windows zlib openssl boost-system boost-date-time boost-regex boost-interprocess websocketpp brotli
  • 从 github ( https://github.com/Microsoft/cpprestsdk )下载 cpprestsdk
  • 生成 Visual Studio 解决方案文件 ( https://github.com/microsoft/cpprestsdk/wiki/How-to-build-for-Windows )。我想生成一个 x86 版本,所以我不得不使用以下命令cmake ../Release -A win32 -DCMAKE_TOOLCHAIN_F ILE=d:\jw\git\vcpkg\scripts\buildsystems\vcpkg.cmake
  • 打开cpprestsdk.sln解决方案并对项目中的发布和调试配置执行以下操作cpprest
    • 将配置类型更改为静态库
    • 将目标文件扩展名更改为.lib.
    • 构建调试和发布版本。

然后我可以在我的解决方案中使用生成的库。

  • 将 cpprestsdk 包含目录添加到我的项目中
  • 将 cpprestsdk 库添加到链接器输入
  • 从 cpprestsdkpackages目录添加 zlib 和 openssl 库。
  • 添加库bcrypt.libwinhttp.lib并添加crypt32.lib到链接器输入(静态链接 Casablanca/CPPREST SDK
  • 您还需要将预处理器标志添加_NO_ASYNCRTIMP到使用 cpprestsdk 的项目中。

我希望这可以帮助某人节省我在工作中失去的一些时间!


推荐阅读