如何让 wasm-ld 遵守 wasm-import-module 属性

How to get wasm-ld to honor wasm-import-module attribute

已修复:我将要导入的函数的 DLL 存储 class 设置为 dllimport,这允许 wasm-ld 发出正确的导入命名空间。

我正在使用 LLVMSharp* 库构建一个编译器,它生成针对 wasm32-unknown-unknown 的 LLVM .bc 模块文件。我试图通过使用 { "wasm-import-module"="wasi_unstable" } 属性标记这些函数值来从 WASI 接口将函数导入其中。 (这应该等同于 clang 对 __attribute__((import_module(<module_name>))) 所做的;参见 here)。但是,当我将生成的 .bc 文件传递​​给 wasm-ld(Windows 64 位 9.0.0 安装版本)时,生成的 .wasm 模块仍然从 "env" 导入这些函数没用。

是否有一些选项可以传递给 wasm-ld 以使其正确处理 wasm-import-module,或者我需要走另一条路吗?

*具体来说,我使用的是 LLVMSharp 5.0.0,这是最新的稳定版本。 LLVMSharp 8.0.0 可能支持构建 .wasm 模块,但没有针对它的 NuGet 版本,而且 Beta 版 NuGet 有一些问题阻止我升级。这就是我走 wasm-ld 路线的原因。

wasm-ld 应该支持这个属性。首先要检查的是您的目标文件。

您可以使用 llvm-readobj --syms 将符号转储到目标文件中。您应该在符号上看到 ImportModule: foo,其中 foo 是您在属性中指定的模块名称。

我看起来像在 wasm-ld 中对此的支持:https://reviews.llvm.org/D45796

我相信这个变化是在 llvm 8.0 之前发生的,所以你将 llvm 8.0 或更高版本。