0

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

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

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

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

4

1 回答 1

0

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

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

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

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

于 2020-02-06T16:46:22.533 回答