将wasm目标文件与wasm-ld

时间:2019-07-31 15:43:44

标签: llvm webassembly

我正在尝试使用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命名为什么都不会改变)。当然,它也不能解释为什么不能识别平方函数。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

wat2wasm的-r标志仅支持wasm目标文件格式的最低要求。例如,它不支持写出符号表,这使它相当无用。今天,生成可链接目标文件的最佳选择是使用llvm(使用clang或.s格式的手写程序集)。