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

时间:2019-05-12 08:25:51

标签: c++ visual-c++

我终于将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使用它们吗?

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我有一个Visual Studio解决方案,其中的项目使用共享DLL中的MFC并使用多线程DLL运行时库。我想静态链接到cpprestsdk,而无需分发三个额外的DLL。链接到cpprestsdk的静态版本不起作用:由于运行时库冲突(/MT-多线程和/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项目中的Release和Debug配置执行以下操作:
    • 将配置类型更改为静态库
    • 将目标文件扩展名更改为.lib
    • 构建调试和发行版本。

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

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

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