我有一个项目,我想升级到通用CRT,我仍然看到vcruntime140.dll和msvcp140.dll的依赖,我认为应该用ucrtbase.dll以及api-ms-win-crt* dlls替换。
我已经查看了这个回复 此处和 本博文这很好地解释了事情,但还是没有结果。 下面是我修改的内容。
我也把我的链接器依赖关系更新到了这组。
但当我运行dumpbin依赖程序mydll.dll时
文件类型。DLL
图片有以下依赖性。
api-ms-win-crt-string-l1-1-0.dll api-ms-win-crt-heap-l1-1-0.dll api-ms-win-crt-runtime-l1-1-0.dll api-ms-win-crt-stdio-l1-1-0.dll api-ms-win-crt-filesystem-l1-1-0.dll api-ms-win-crt-convert-l1-1-0.dll api-ms-win-crt-time-l1-1-0.dll api-ms-win-crt-environment-l1-1-0.dll api-ms-win-crt-utility-l1-1-0.dll VCRUNTIME140.dll USER32.dll ADVAPI32.dll WSOCK32.dll CRYPT32.dll WS2_32.dll MSVCP140.dll bcrypt.dll KERNEL32.dll
摘要
E000 .data 66000 .rdata E000 .reloc 1000 .rsrc 14A000 .text
我是不是还缺了什么东西,才能够放弃对特定CRT版本的依赖?
我又做了一些调查,发现了 本页 的,说了以下内容。
从Visual Studio 2015开始,CRT已被重构为新的二进制文件。通用CRT(UCRT)包含标准C99 CRT库导出的函数和globals。UCRT现在是一个Windows组件,并作为Windows 10的一部分发布。
很好,这正是我所期望的。 不过就在下面是这样的。
vcruntime库包含了Visual C++ CRT实现的特定代码,比如异常处理和调试支持,运行时检查和类型信息,实现细节和某些扩展库函数。这个库是特定于所使用的编译器版本的。
这意味着仍然有一个非通用的VC++依赖,被VS链接进来。 对我来说,这意味着一个无依赖的DLL并不真正存在(至少不是用VC++构建的东西),因为你总是会有一个vcruntime依赖。
总是有静态链接(MT)的选项,但在我的情况下,我也在看一个有clr的DLL,这两个选项是相互排斥的。 应用程序本地部署(只需将vcruntime140.dll与二进制文件一起复制)似乎也可以,对于我想做一个portantxcopy部署的东西来说,可能是最好的选择。
我打算暂时把这个标记为答案,但如果有办法解决这个问题,我很想看看。