我正在尝试将两个简单的WASM文件与WASM-LD(LLVM WASM Linker(链接
WASM文件是从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还是$ _start不会改变任何事情(。当然,它不能解释为什么未识别正方形功能。
有什么想法吗?
谢谢!
wat2wasm的-r
标志仅支持WASM对象文件格式的最低最小值。例如,它不支持写出符号表,这肯定会使它变得毫无用处。今天生产可链接对象文件的最佳选择是使用LLVM(使用clang或手写汇编以.s格式使用(。