2017-09-20 9 views
6

में सी फ़ंक्शन को कॉल करते समय त्रुटि I जावास्क्रिप्ट के साथ .wasm में संकलित एक सी फ़ंक्शन को कॉल करने के लिए एक साधारण उदाहरण का प्रयास कर रहा हूं।"दावा विफल: आपको रनटाइम तैयार होने की प्रतीक्षा करनी है" जावास्क्रिप्ट

यह counter.c फ़ाइल है:

#include <emscripten.h> 

int counter = 100; 

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

मैं इसे emcc counter.c -s WASM=1 -o counter.js का उपयोग कर संकलित।

मेरे main.js JavaScript फ़ाइल:

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

मेरे index.html फ़ाइल केवल शरीर, और कुछ नहीं में भार दोनों .js फ़ाइलों:

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

त्रुटि मैं हो रही है:

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

जब मैं tr main.js में कॉल करने के लिए y। रनटाइम तैयार होने के लिए मैं कैसे इंतजार कर सकता हूं?

उत्तर

5

मुझे एक त्वरित समाधान मिला।

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

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

यह Module उद्देश्य यह है कि emscripten द्वारा उत्पन्न counter.js लिपि में परिभाषित किया गया है बदल: मैं करने के लिए main.js को संशोधित करने की जरूरत है।

0

अन्य जवाब काम करता है, निर्दिष्ट के रूप में "मैं कैसे बता सकता है जब पेज को पूरा भरा है और यह संकलित कार्यों कॉल करने के लिए सुरक्षित है?" शीर्षक है, जहां लेख में यह भी एक और तरीका है का उल्लेख है कॉल करने के लिए प्रतीक्षा करने के लिए के तहत here कोड जहां आप अपने सी में एक मुख्य कार्य/सी ++ कोड C/C++ जावास्क्रिप्ट एपीआई के लिए इतना तरह के माध्यम से एक जावास्क्रिप्ट फ़ंक्शन को कॉल करने में शामिल हैं:

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

यह काम करता है मुख्य कार्य हमेशा निष्पादित करता है क्योंकि जब क्रम आरंभ नहीं हो जाता।

संबंधित मुद्दे