c – Visual Studio 2015运行时依赖项或如何摆脱Universal CRT?
作者:互联网
编译了几个.dll使用visual studio 2015,并试图部署在一些旧的Windows 7/64位上.试图猜测应用程序启动和复制MSVCP140.DLL& VCRUNTIME140.DLL – 但应用程序无法加载vs2015 dll.开始分析什么是错误的 – 依赖者walker显示来自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 *依赖地狱,但无论我尝试过什么 – 我都没有成功.我试图链接libvcruntime.lib,libucrt.lib,libcmt.lib,尝试禁用链接器选项“/nodefaultlib:vcruntime.lib”,甚至尝试添加include目录$(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通用CRT(动态和静态)的详细信息,请访问:
https://msdn.microsoft.com/en-us/library/abx4dbyh.aspx
标签:c,visual-studio-2015,msvcrt 来源: https://codeday.me/bug/20190925/1817762.html