c++ - 如何在VS项目中静态链接没有dll文件的cpprest?
问题描述
我终于将 Casablanca/CPPRESTSDK 与 VS17 链接起来,感谢这篇文章Statically linking Casablanca/CPPREST SDK和其他一些。但是现在我看到,当我启动项目时,出于某种原因,VS 会自动zlib1.dll
SSLEAY32.dll
LIBEAY32.dll
在文件夹中生成 3 个 .exe DLL 文件,但我实际上是静态链接的,根本没有它们。我也有这些lib格式的文件vcpkg-master\installed\x86-windows-static\lib
,我可以以某种方式使用它们而不是dll吗?
解决方案
我有同样的问题。我有一个 Visual Studio 解决方案,其中项目在共享 DLL 中使用 MFC 并使用多线程 DLL 运行时库。我想静态链接到 cpprestsdk,而不需要分发三个额外的 DLL。/MT
链接到 cpprestsdk 的静态版本不起作用:由于运行时库冲突( -多线程和/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
:- 将配置类型更改为静态库
- 将目标文件扩展名更改为
.lib
. - 构建调试和发布版本。
然后我可以在我的解决方案中使用生成的库。
- 将 cpprestsdk 包含目录添加到我的项目中
- 将 cpprestsdk 库添加到链接器输入
- 从 cpprestsdk
packages
目录添加 zlib 和 openssl 库。 - 添加库
bcrypt.lib
,winhttp.lib
并添加crypt32.lib
到链接器输入(静态链接 Casablanca/CPPREST SDK) - 您还需要将预处理器标志添加
_NO_ASYNCRTIMP
到使用 cpprestsdk 的项目中。
我希望这可以帮助某人节省我在工作中失去的一些时间!
推荐阅读
- postgresql - 使用 copy 或 pgcopy 批量插入时间戳 int Postgres
- xquery - 如何限制 Marklogic 中特定集合搜索的 Search API?
- image - 通过 API 从 Instagram 帐户获取照片
- python - 无法找出在脚本中使用代理轮换来加速执行过程的正确方法
- javascript - 如何在 Reactjs 中使用搜索栏过滤表格行
- firebase - Firebase 实时数据库验证编号增量
- javascript - 使用 Jest 的 React.js 自定义钩子测试
- aop - Maven 测试用例不调用 AspectJ 方面
- android - 为什么我们需要 ViewModelProvider.Factory 将视图模型传递给屏幕?
- python - 尝试使用动态文本和确认按钮编写 tkinter 弹出窗口