如何在VS项目中静态链接没有dll文件的cpprest?

How to statically link cpprest without dll files in VS project?

本文关键字:dll 文件 cpprest 链接 VS 项目 静态      更新时间:2023-10-16

我终于将Casablanca/CPPRESTSDK与VS17链接起来,感谢这篇文章静态链接Casablanca/CPPREST SDK和其他一些。但是现在我明白了,当我开始项目时,出于某种原因,VS 自动生成了 3 个 DLL 文件,zlib1.dllSSLEAY32.dllLIBEAY32.dll在带有.exe的文件夹中,但我实际上是静态链接的,因为根本没有它们。我也有vcpkg-masterinstalledx86-windows-staticlib的 lib 格式的这些文件,我可以以某种方式使用它们而不是 dll 吗?

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

我的解决方案:

  • 下载vcpkg(https://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下载CPPrestsdk (https://github.com/Microsoft/cpprestsdk)
  • 生成 Visual Studio 解决方案文件 (https://github.com/microsoft/cpprestsdk/wiki/How-to-build-for-Windows)。我想生成一个 x86 版本,所以我不得不使用以下命令cmake ../Release -A win32 -DCMAKE_TOOLCHAIN_F ILE=d:jwgitvcpkgscriptsbuildsystemsvcpkg.cmake.
  • 打开cpprestsdk.sln解决方案,并对cpprest项目中的发布和调试配置执行以下操作:
    • 将配置类型更改为静态库
    • 将目标文件扩展名更改为.lib
    • 生成调试和发布版本。

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

  • 将 CPPrestsdk 包含目录添加到我的项目
  • 将 CPPrestsdk 库添加到链接器输入
  • 从 CPPrestsdkpackages目录中添加 zlib 和 openssl 库。
  • 将库bcrypt.libwinhttp.libcrypt32.lib也添加到链接器输入(静态链接卡萨布兰卡/CPPREST SDK)
  • 您还需要将预处理器标志_NO_ASYNCRTIMP添加到使用 CPPrestsdk 的项目中。

我希望这可以帮助某人节省我失去的一些时间