如何让 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 或更高版本。
已修复:我将要导入的函数的 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 或更高版本。