2017-09-20 7 views
6

JavaScriptを使用して.wasmにコンパイルされたC関数を呼び出す簡単な例を試しています。私はemcc counter.c -s WASM=1 -o counter.jsを使用して、それをコンパイル"アサーションが失敗しました:ランタイムの準備が整うのを待つ必要があります" JavaScriptでC関数を呼び出すときのエラー

#include <emscripten.h> 

int counter = 100; 

EMSCRIPTEN_KEEPALIVE 
int count() { 
    counter += 1; 
    return counter; 
} 

これはcounter.cファイルです。私は取得していますエラーがある

<script type="text/javascript" src="counter.js"></script> 
<script type="text/javascript" src="main.js"></script> 

const count = Module.cwrap('count ', 'number'); 
console.log(count()); 

マイindex.htmlファイルは本体のみで両方の.jsファイルをロードし、何もない:

のJavaScriptファイル

マイmain.jsUncaught abort("Assertion failed: you need to wait for the runtime to be ready (e.g. wait for main() to be called)") at Error

I tr y をmain.jsに電話してください。 ランタイムの準備が整うのをどうやって待つことができますか?

答えて

5

私は迅速な解決策を見つけました。これはemscriptenによって生成counter.jsスクリプトで定義されModuleオブジェクトを変更

Module['onRuntimeInitialized'] = onRuntimeInitialized; 
const count = Module.cwrap('count ', 'number'); 

function onRuntimeInitialized() { 
    console.log(count()); 
} 

:私はにmain.jsを変更する必要がありました。

0

hereが下指定されている他の答えは、作品「ページが完全にロードされ、コンパイルされた関数を呼び出すことが安全であるとき、私が言うことができるどのよう」の記事でもコールするまで待機する別の方法に言及し、ヘッダ、

#include <emscripten.h> 
int main() { 
    ES_ASM(const count = Module.cwrap('count ', 'number'); console.log(count());); 
    return 0; 
} 

ランタイムが初期化されるときに主な機能は常に実行されるため、この作品:あなたがそうのようなJavascriptのAPIへのC/C++からJavaScript関数を呼び出すあなたのC/C++コードでの主な機能が含まれるコード。

関連する問題