簡體   English   中英

在Nim和Emscripten中使用字符串會導致JavaScript錯誤

[英]Using strings in Nim with Emscripten causes JavaScript error

我正在嘗試制作一個在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 (對於堆棧代碼段,它們太大了。)

Emscripten 1.35.0可能太舊了,無法使用UTF8ToString函數。 您的示例對於Emscripten 1.37.1來說對我來說效果很好。

附帶說明,我注意到您使用的是固定的Emscripten堆大小。 如果要動態增長堆,可以使用-s ALLOW_MEMORY_GROWTH=1標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM