我用vs2019写程序时,编译出的exe要使用的api会链接到api-ms-win开头的dll上,比如api-ms-win-core-file-l2-1-0.dll而不是之前的kernel32,user32(先叫它们系统dll吧)
我很好奇这些文件是干嘛用的,之前直接链接到系统dll不是很好吗?这样编译出的程序也小,兼容性也好。现在在网上下载一些工具,一运行就提示api-ms-win-xxx找不到。然后因为兼容性问题要折腾半天。。。我的程序链接到这些dll上,相比于直接链接到系统dll有什么优点吗?(为什么现代的vs编译器都会这样做)
现在我在网上了解到的是,win-crt-win是"补丁文件",另一种说是"延迟加载的dll"。然后其他的全是某某程序丢失这些dll的修复方法,没有什么更详细的信息。我想问的是这些dll是干嘛用的,msdn上面有关于这些dll的介绍和用途吗,我怎么才能通过设置vs让编译器不要链接到这些dll?
api-ms-win这些都是操作系统提供的动态库,c/c++的库函数依赖这些库文件(或者说,c/c++提供的函数和功能是建立在这些库基础上的),比如说,在代码中调用了printf函数,printf函数会调用系统底层的api-ms这些库来实现最终的打印功能。调用顺序是:用户写的api 调用 C/C++提供的函数 ,C/C++提供的函数 调用api-ms这些操作系统库函数。