Llvm 如何让wasm ld遵守wasm导入模块属性

Llvm 如何让wasm ld遵守wasm导入模块属性,llvm,webassembly,wasi,Llvm,Webassembly,Wasi,修复:我将要导入的函数的DLL存储类设置为dllimport,这允许wasm ld发出正确的导入命名空间 我正在用LLVMSharp*库构建一个编译器,它会向wasm32 unknown发出LLVM.bc模块文件。我正试图通过使用{“wasmimport module”=“WASI_unstable”}属性标记这些函数值,从WASI接口将函数导入其中。(这应该与clang使用\uuuuu属性((import\u module())所做的相同;请参阅)。但是,当我将生成的.bc文件传递给wasm

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

我正在用LLVMSharp*库构建一个编译器,它会向
wasm32 unknown
发出LLVM.bc模块文件。我正试图通过使用
{“wasmimport module”=“WASI_unstable”}
属性标记这些函数值,从WASI接口将函数导入其中。(这应该与clang使用
\uuuuu属性((import\u module())
所做的相同;请参阅)。但是,当我将生成的.bc文件传递给wasm ld(Windows 64位9.0.0安装版本)时,生成的.wasm模块仍然从
“env”
导入这些函数,但这不起作用

是否有一些选项可以传递给wasm ld以使其正确处理
wasm导入模块
,或者我需要走另一条路线


*具体来说,我使用的是LLVMSharp 5.0.0,这是最新的稳定版本。LLVMSharp 8.0.0可能支持building.wasm模块,但没有发布NuGet,beta NuGet存在一些问题,无法升级。这就是我选择wasm ld路线的原因。

wasm ld应该支持此属性。首先要检查的是对象文件

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

我想这方面的支持是在wasm ld中得到的:


我相信这个更改是在llvm 8.0之前出现的,所以您将使用llvm 8.0或更高版本。

欢迎使用堆栈溢出。请考虑添加一些代码,这样我们就可以帮助您调试。您是对的;目标文件错误。我需要将导入函数的DLL存储类设置为
dllimport
。对于那些像我一样使用Windows的人来说,
llvm nm
工具使我能够查看.bc文件中的符号--
llvm readobj
工具似乎不存在,也无法为Windows安装。