为什么Windows crate包含编译的静态库?



为windows API提供Rust绑定的windows crate被分成几个内部crate,其中一个是windows-target。这个创建也被分成几个内部的箱子,这些箱子是根据目标平台加载的。

这些平台相关的crate似乎没有做太多的事情:它们只是将cargo:rustc-link-search=native={LIB_DIR}传递给编译器。

现在看看这些LIB_DIR目录,它们包含一个已经编译的静态库,每个平台一个。例子:windows.0.48.0。lib文件。

我找不到关于这个的任何文档,但我想这些静态库是从baseline目录中找到的C源文件编译的,其中包含…c语言中Windows API函数声明的重复,这很有趣。

Rust绑定本身是在别处写的,比如这里(GDI绑定)。

问题:这些编译的C静态库似乎是Windows中已有API的复制,那么为什么它们是必要的呢?

我通过直接询问官方的windows crate维护者得到了回应:

虽然GNU和MSVC工具链经常提供一些导入库来支持c++开发,但这些库文件通常是不完整的,缺失的,或者是完全错误的。这可能导致很难诊断的链接器错误。windows-targetscrate确保windowswindows-syscrate定义的所有函数都可以链接,而不依赖于工具链分发的隐式库文件。

感兴趣的人可以在这里看到更多的细节。

最新更新