gol*_*sky 3 c++ windows winapi linker visual-studio-2015
如何显式指定MSVC编译器/链接器来链接API 集(*ms-win*模式匹配 dll)而不是kernel32.dll、ntdll.dll等?
例如,我创建了一个简单的 dll,它只调用一些基本的 WinAPI。当检查它的 IAT (通过CFF Explorer、 python pefile库等)时,只有kernel32.dll。我希望看到的是*ms-win* dll。
API 集在内部使用,这意味着即使是 Windows 7、8 或 10 上的“传统”系统 DLL 也会使用它们。因此,您没有理由需要直接使用它们。
也就是说,您可以使用许多“umbrella”库,而不是链接到 classicKERNEL32.DLL等:
请记住,这些旨在与它们附带的 Windows 10 SDK 相同的 Windows 版本相匹配(即它们向前兼容,而不是向后兼容)。还有一些*_downlevel.lib版本支持旧版本的 Windows。这些主要供驱动程序开发人员根据Microsoft Docs使用
UWP 应用程序使用自己的伞库WindowsApps.lib/ WindowsApps_downlevel.lib.
有关伞形库的更多信息,请参阅Microsoft Docs。
请注意,您不应链接多个伞形库,也不应在同一链接中将 kernel32.lib 与伞形库混合在一起。对于
WindowsApps.lib. VS 2022 17.2 中的一项改进可以解决这个问题。请参阅此 VS 反馈问题。
另外,由于 Microsoft Visual C/C++ 运行时的一个怪癖,如果您使用 链接,您也
onecore_apiset.lib应该使用。/IGNOREDEFAULTLIB:onecore.lib /IGNOREDEFAULTLIB:kernel32.lib使用/SUBSYSTEM:WINDOWS,10.0or也是一个好主意/SUBSYSTEM:CONSOLE,10.0。请参阅此 VS 反馈问题。
| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |