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

C++ 如何在VS项目中静态链接没有dll文件的cpprest?,c++,visual-c++,C++,Visual C++,我终于将卡萨布兰卡/CPPRESTSDK与VS17链接起来了,感谢这篇文章和其他一些文章。但现在我明白了,当我启动project时,由于某种原因VS会自动在带有.exe的文件夹中生成3个DLL文件zlib1.DLLSSLEAY32.DLLLIBEAY32.DLL,但实际上我是静态链接的,根本没有它们。我在vcpgg master\installed\x86 windows static\lib中也有这些lib格式的文件,我能用它们代替DLL吗?我也有同样的问题。我有一个VisualStudio解

我终于将卡萨布兰卡/CPPRESTSDK与VS17链接起来了,感谢这篇文章和其他一些文章。但现在我明白了,当我启动project时,由于某种原因VS会自动在带有.exe的文件夹中生成3个DLL文件
zlib1.DLL
SSLEAY32.DLL
LIBEAY32.DLL
,但实际上我是静态链接的,根本没有它们。我在
vcpgg master\installed\x86 windows static\lib
中也有这些lib格式的文件,我能用它们代替DLL吗?

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

我的解决方案:

  • 下载
    vcpkg
    ()。这是一个包C和C++库包管理器。你需要“引导”它。请参阅快速入门
  • 为cpprestsdk安装必要的依赖项:`vcpkg安装--triplet x86 windows zlib openssl boost系统boost日期时间boost regex boost进程间websocketpp brotli
  • 从github()下载cpprestsdk
  • 生成Visual Studio解决方案文件()。我想生成一个x86版本,所以我必须使用以下命令
    cmake../Release-A win32-DCMAKE\u TOOLCHAIN\u F ILE=d:\jw\git\vcpkg\scripts\buildsystems\vcpkg.cmake
  • 打开
    cpprestsdk.sln
    解决方案,并对
    cpprest
    项目中的发布和调试配置执行以下操作:
    • 将配置类型更改为静态库
    • 将目标文件扩展名更改为
      .lib
    • 生成调试和发布版本
然后,我可以在解决方案中使用生成的库

  • 将cpprestsdk include目录添加到我的项目中
  • 将cpprestsdk库添加到链接器输入
  • 从cpprestsdk
    packages
    目录添加zlib和openssl库
  • 将库
    bcrypt.lib
    winhttp.lib
    crypt32.lib
    也添加到链接器输入()
  • 您还需要将预处理器标志
    \u NO\u ASYNCRTIMP
    添加到使用cpprestsdk的项目中

我希望这有助于别人节省一些时间,我失去了让它工作

似乎您希望静态链接所有cpprestsdk的依赖项,并递归链接这些依赖项的依赖项。另外请注意,扩展名为
.lib
的文件不是必需的静态库,它们可以是链接dll的导入库。我只希望在项目中有1.exe文件,而不包含任何dll。