我正在尝试使用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命名为什么都不会改变)。当然,它也不能解释为什么不能识别平方函数。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
wat2wasm的-r
标志仅支持wasm目标文件格式的最低要求。例如,它不支持写出符号表,这使它相当无用。今天,生成可链接目标文件的最佳选择是使用llvm(使用clang或.s格式的手写程序集)。