我正在尝试制作一个在 Emscripten 上运行的简单 Nim 应用程序。我还jsbind
用来调用 JavaScript 函数,即console.log
.
我有以下文件test.nim
:
import jsbind
type Window* = ref object of JSObj
type Console* = ref object of JSObj
proc getConsole*(): Console {.jsimportgWithName: "function(){return console;}".}
proc log*(c: Console, a: any) {.jsimport.}
echo("Before log")
getConsole().log("Hello")
echo("After log")
我nim.cfg
的是:
@if emscripten:
cc = clang
gc = none
clang.exe = "emcc"
clang.linkerexe = "emcc"
clang.options.linker = ""
cpu = "i386"
out = "index.html"
passC = "-Iemscripten"
passL = "-Lemscripten -s TOTAL_MEMORY=335544320"
@end
然后我编译:
nim c -d:emscripten --out=index.html test.nim
然后,当我index.html
在浏览器中打开并进行getConsole().log
调用时,我收到许多关于UTF8ToString
未定义函数的控制台错误,并且程序终止:
这个函数似乎是一个 Emscripten 前奏函数——我如何确保这个函数和我需要的任何其他函数都包含在我的 JavaScript 输出中?
启用和不启用 WebAssembly 选项都会发生此错误。我正在使用 Nim 0.16.0 和 emcc 1.35.0。
这是两个 Emscripten 输出文件的 JSFiddle。(它们对于堆栈片段来说太大了。)