C++ 如何在VS项目中静态链接没有dll文件的cpprest?
我终于将卡萨布兰卡/CPPRESTSDK与VS17链接起来了,感谢这篇文章和其他一些文章。但现在我明白了,当我启动project时,由于某种原因VS会自动在带有.exe的文件夹中生成3个DLL文件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解
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)但作为库导出的预编译版本。所以我不得不自己编译
我的解决方案:
- 下载
()。这是一个包C和C++库包管理器。你需要“引导”它。请参阅快速入门vcpkg
- 为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
目录添加zlib和openssl库packages
- 将库
、bcrypt.lib
和winhttp.lib
也添加到链接器输入()crypt32.lib
- 您还需要将预处理器标志
添加到使用cpprestsdk的项目中\u NO\u ASYNCRTIMP
我希望这有助于别人节省一些时间,我失去了让它工作 似乎您希望静态链接所有cpprestsdk的依赖项,并递归链接这些依赖项的依赖项。另外请注意,扩展名为
.lib
的文件不是必需的静态库,它们可以是链接dll的导入库。我只希望在项目中有1.exe文件,而不包含任何dll。