我正在尝试用wasm-ld ( llvm wasm链接器)链接两个简单的wasm文件
wasm文件是使用wabt工具从2个简单的wat文件(mod_a.wat和mod_b.wat -请参见下面的代码)编译而成的。更准确地说:
;;mod_a.wat
(module $mod_a
(import "mod_b" "square" (func $square (param i32) (result i32)))
(start $start)
;; _start entry point expected by wasm-ld
(func $start
(drop (call $square (i32.const 16)))
)
)
;;mod_b.wat
(module $mod_b
(export "square" (func $square))
(func $square (param $value i32) (result i32)
(i32.mul (local.get $value) (local.get $value))
)
)
$ wat2wasm -r ./mod_a.wat
$ wat2wasm -r ./mod_b.wat
$ wasm-ld-8 ./mod_a.wasm ./mod_b.wasm -o main.wasm
wasm-ld-8: error: entry symbol not defined (pass --no-entry to supress): _start
wasm-ld-8: error: ./mod_a.wasm: undefined symbol: square我不太理解为什么这两个符号是未定义的(注意:我将启动函数命名为$start还是$_start并不会改变任何事情)。这当然不能解释为什么平方函数不被识别。
有什么想法吗?
谢谢!
发布于 2019-08-06 08:29:05
wat2wasm的-r标志仅支持最小的wasm对象文件格式。例如,它不支持写出符号表,这无疑使它变得相当无用。现在,生成可链接目标文件的最佳选择是使用llvm (使用clang或.s格式的手写汇编)。
https://stackoverflow.com/questions/57294541
复制相似问题