最后,我将Casablanca / CPPRESTSDK与VS17链接在一起,感谢Statically linking Casablanca/CPPREST SDK和其他文章。但是现在我看到,当我启动项目时,由于某种原因,VS会在.exe文件夹中自动生成3个DLL文件zlib1.dll SSLEAY32.dll LIBEAY32.dll,但实际上我是静态链接的,因为根本没有它们。我也有vcpkg-master\installed\x86-windows-static\lib的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(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项目中的Release和Debug配置执行以下操作:
  • 将配置类型更改为静态库
  • 将目标文件扩展名更改为.lib
  • 构建调试和发行版本。

  • 然后,我可以在解决方案中使用生成的库。
  • 将cpprestsdk包含目录添加到我的项目
  • 将cpprestsdk库添加到链接器中输入
  • 从cpprestsdk packages目录添加zlib和openssl库。
  • 也将库bcrypt.libwinhttp.libcrypt32.lib添加到链接器输入(Statically linking Casablanca/CPPREST SDK)
  • ,还需要将预处理器标志_NO_ASYNCRTIMP添加到使用cpprestsdk的项目中。

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

    09-12 06:21