gpt4 book ai didi

c++ - Visual Studio 2015 运行时依赖或如何摆脱 Universal CRT?

转载 作者:IT老高 更新时间:2023-10-28 21:39:22 31 4
gpt4 key购买 nike

使用 Visual Studio 2015 编译了几个 .dll,并尝试部署在一些较旧的 Windows 7/64 位上。还尝试猜测应用程序需要哪些 dll 才能启动并复制 MSVCP140.DLL 和 VCRUNTIME140.DLL - 但应用程序无法加载 vs2015 dll。开始分析出了什么问题 - 依赖遍历器显示了来自以下 dll 的依赖关系:

API-MS-WIN-CRT-MATH-L1-1-0.DLL
API-MS-WIN-CRT-HEAP-L1-1-0.DLL
API-MS-WIN-CRT-CONVERT-L1-1-0.DLL
API-MS-WIN-CRT-STRING-L1-1-0.DLL
API-MS-WIN-CRT-STDIO-L1-1-0.DLL
API-MS-WIN-CRT-RUNTIME-L1-1-0.DLL
API-MS-WIN-CRT-FILESYSTEM-L1-1-0.DLL
API-MS-WIN-CRT-TIME-L1-1-0.DLL

这尤其令人惊讶,因为据我所知,CRT 负责启动 dll/exe,它不提供任何更高级别的服务。

好的,试图弄清楚如何摆脱它们或至少减少它们。

找到一篇文章: https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/

它提到了发布静态库 - 所以我认为我可以链接它们并摆脱 *L1-1-0.DLL* 依赖 hell ,但无论我尝试了什么 - 我都没有成功。我尝试链接 libvcruntime.lib、libucrt.lib、libcmt.lib,尝试使用链接器选项“/nodefaultlib:vcruntime.lib”禁用,甚至尝试添加包含目录 $(UniversalCRT_IncludePath),还覆盖了一些的定义,因为我试图猜测它们有效 - 我的尝试都没有帮助。

作为一种中间解决方案,我回退到使用 Visual Studio 2013,其中 CRT dll 只有两个:msvcp120.dll、msvcr120.dll。

当然,您可能会建议安装 Visual Studio 2015 运行时,但我们的要求之一是支持独立的可执行文件 - 无需任何安装即可工作 - 所以现在额外安装是不可能的。

除了等待 Visual Studio 2017 到来之外,你还能推荐我什么吗?

最佳答案

,你无法摆脱它们,但我可以通过设置C/C++ > 代码生成 > 运行时库 编译器选项

  • 对于调试:从 /MDd/MTd
  • 对于发布:从 /MD/MT

这删除了所有 API-MS-WIN-CRT-* 和运行时 dll 引用,并导致所有 CRT 代码被静态链接。

关于新的 VS2015 Universal CRT(动态和静态)的详细信息在这里: https://msdn.microsoft.com/en-us/library/abx4dbyh.aspx

Note that the only other option is to compile with an older-compiler (like virus developers),not newer, because Microsoft promises same UCRT-requirements for any newer compiler-version as well.

关于c++ - Visual Studio 2015 运行时依赖或如何摆脱 Universal CRT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35805113/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com