Chr*_*don 2 crt msvcrt visual-c++
我有一个项目正在尝试更新到通用 CRT,但我仍然看到对 vcruntime140.dll 和 msvcp140.dll 的依赖,我认为应该将其替换为 ucrtbase.dll,以及api-ms-win-crt* dll。
我已经在这里查看了这个回复以及这篇博文,它们很好地解释了事情,但仍然没有运气。这是我所做的更改:
我还将链接器依赖项更新为该集:
但是当我运行 dumpbin /dependents mydll.dll 时
文件类型:DLL
图像具有以下依赖关系:
Run Code Online (Sandbox Code Playgroud)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概括
Run Code Online (Sandbox Code Playgroud)E000 .data 66000 .rdata E000 .reloc 1000 .rsrc 14A000 .text
我是否还缺少其他东西才能放弃对特定 CRT 版本的依赖?
我做了更多挖掘,发现此页面显示以下内容:
从 Visual Studio 2015 开始,CRT 已重构为新的二进制文件。通用 CRT (UCRT) 包含标准 C99 CRT 库导出的函数和全局变量。UCRT 现在是 Windows 组件,并作为 Windows 10 的一部分提供。
太好了,这正是我所期望的。下面是这样的:
vcruntime 库包含 Visual C++ CRT 实现特定的代码,例如异常处理和调试支持、运行时检查和类型信息、实现细节和某些扩展库函数。该库特定于所使用的编译器版本。
这意味着仍然存在由 VS 链接的非通用 VC++ 依赖项。对我来说,这意味着无依赖项的 DLL 并不真正存在(至少不是用 VC++ 构建的),因为您将始终具有 vcruntime 依赖项。
总是有静态链接 (/MT) 的选项,但就我而言,我还在查看具有 /clr 的 DLL,并且这两个选项是互斥的。应用程序本地部署(只需将 vcruntime140.dll 与二进制文件一起复制)似乎也可以工作,并且可能是我想要进行便携式/xcopy 部署的最佳选择。
我现在将把它标记为答案,但如果有办法解决这个问题,我有兴趣看看它。
| 归档时间: |
|
| 查看次数: |
2034 次 |
| 最近记录: |