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

taor4pac  于 2023-04-21  发布在  Windows
关注(0)|答案(1)|浏览(129)

windows crate提供Rust绑定到Windows API,它被分成几个内部crate,其中一个是windows-targets。这个创建也被分成几个internal crates,这些是根据目标平台加载的。
这些依赖于平台的板条箱似乎没有做太多的事情:它们只是将cargo:rustc-link-search=native={LIB_DIR}传递给编译器。
现在看看这些LIB_DIR目录,它们包含一个已经编译好的静态库,每个平台一个。例如:windows.0.48.0.lib文件。
我找不到任何关于这方面的文档,但我认为这些静态库是从baseline目录中的C源文件编译而来的,其中包含...... C中Windows API函数声明的副本。
Rust绑定本身是在其他地方编写的,比如here (GDI bindings)

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

xqkwcwgp

xqkwcwgp1#

我得到了asking directly官方windows crate维护者的回复:
虽然GNU和MSVC工具链经常提供一些导入库来支持C++开发,但这些库文件通常不完整,丢失或完全错误。这可能导致链接器错误,很难诊断。windows-targets crate确保windowswindows-sys crate定义的所有函数都可以链接,而不依赖于工具链分发的隐式库文件。
对于任何感兴趣的人,可以看到更多的细节here

相关问题