Okay, so I took an example:
#include <math.h>
extern "C" {
int int_sqrt(int x) {
return sqrt(x);
}
}
and put it in the file hello_function.cpp
I ran their command, in an emcmdprompt, and it produced errors:
emcc hello_function.cpp -o function.html -s EXPORTED_FUNCTIONS='["_int_sqrt"]'
-s EXPORTED_RUNTIME_METHODS='["ccall","cwrap"]'
I found that swapping the double and single quotes solved that problem:
emcc hello_function.cpp -o function.html -s
EXPORTED_FUNCTIONS="['_int_sqrt']" -s
EXPORTED_RUNTIME_METHODS="['ccall','cwrap']"
I put this line in the html file:
<script type="text/javascript" src="/cpp/sqrt/function.js"></script>
When I load the html file I get lots of errors:
Uncaught (in promise) TypeError: Cannot read property 'apply' of undefined
at Module._emscripten_stack_init (function.js:1832)
at stackCheckInit (function.js:2104)
at run (function.js:2116)
at runCaller (function.js:2095)
at removeRunDependency (function.js:1451)
at receiveInstance (factorial.js:1)
at receiveInstantiationResult (factorial.js:1)
Module._emscripten_stack_init @ function.js:1832
stackCheckInit @ function.js:2104
run @ function.js:2116
runCaller @ function.js:2095
removeRunDependency @ function.js:1451
receiveInstance @ factorial.js:1
receiveInstantiationResult @ factorial.js:1
function.js:1477 Uncaught (in promise) RuntimeError: abort(Assertion
failed: undefined) at Error
at jsStackTrace (function.js:1755)
at stackTrace (function.js:1772)
at abort (function.js:1471)
at assert (function.js:678)
at removeRunDependency (function.js:1438)
at receiveInstance (function.js:1630)
at receiveInstantiationResult (function.js:1647)
at abort (function.js:1477)
at assert (function.js:678)
at removeRunDependency (function.js:1438)
at receiveInstance (function.js:1630)
at receiveInstantiationResult (function.js:1647)
As to setup `Module['onRuntimeInitialized']` early on
I'm not sure of the proper syntax. I tried
<script>
Module['onRuntimeInitialized'] = onRuntimeInitializedFactorial;
</script>
and I get the error:
Uncaught ReferenceError: Module is not defined
I feel like I'm missing something really basic that the rest of you just
take for granted....
I look forward to more clarification
On Friday, July 2, 2021 at 2:53:15 PM UTC-6 [email protected] wrote:
> Also, I believe you need to setup `Module['onRuntimeInitialized']` early
> on, like at the top level of your script, preferably even before the module
> JS file is imported. IIUC, you need to make sure you register this
> callback before the module is actually initialized, otherwise it might
> never be called.
>
> On Fri, Jul 2, 2021 at 1:05 PM Alon Zakai <[email protected]> wrote:
>
>> To use cwrap(), you must export it. See
>>
>> https://emscripten.org/docs/api_reference/preamble.js.html?highlight=cwrap
>>
>> You can also run an example from the tutorial, which I verified now,
>>
>>
>> https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html?highlight=cwrap#interacting-with-an-api-written-in-c-c-from-nodejs
>>
>> It does have one typo which I'll fix now, the require should be of
>> "api_example.js".
>>
>> On Fri, Jul 2, 2021 at 11:25 AM Gary Stuart <[email protected]> wrote:
>>
>>> Hi,
>>>
>>> I am trying to use emscripten on Windows 10.
>>> I have an existing Javascript client application that works.
>>> I want to connect in c++ code, and be able to call those c++ functions
>>> when needed.
>>> I have spent 1.5 days and can't even make a simple example work.
>>>
>>> I am using emcc version: 2.0.25 (Online the latest version seems to be
>>> 2.0.21???)
>>> I am using Chrome
>>>
>>> My example:
>>> function factorial()
>>> {
>>> console.log("MT:F")
>>> Module.onRuntimeInitialized = _ => {
>>> console.log("A")
>>>
>>> const factorialCpp = Module.cwrap('factorial', 'number',
>>> ['number']);
>>> console.log(factorialCpp)
>>> var result = factorialCpp(10);
>>> console.log(result)
>>> };
>>> console.log("MT:F-E")
>>> }
>>>
>>> When I call this function, I get only the "MT:F" and "MT:F-E", and no
>>> errors in browser console.
>>>
>>> My compile line:
>>> emcc -O3 -s WASM=1 -s EXPORTED_RUNTIME_METHODS='["cwrap"]' -s
>>> EXPORTED_FUNCTIONS="['_factorial']" factorial.cpp factorial-service.cpp -o
>>> factorial.js
>>>
>>> If optimization is -O0, it complains about the cwrap export
>>>
>>> I have also tried:
>>> function factorial2()
>>> {
>>> Module['onRuntimeInitialized'] = onRuntimeInitializedFactorial;
>>> const factorialCpp = Module.cwrap('factorial', 'number', ['number']);
>>>
>>> function onRuntimeInitializedFactorial()
>>> {
>>> console.log("MT:F")
>>> console.log("A")
>>> var result = factorialCpp(10);
>>> console.log(result)
>>> console.log("MT:F-E")
>>> }
>>> }
>>>
>>> and:
>>> function factorial3()
>>> {
>>> var factorialCpp = Module.cwrap("factorial", "number", ["number"]);
>>> var result = factorialCpp(10);
>>> }
>>>
>>> Both produce an error: Uncaught TypeError: Module.cwrap is not a function
>>>
>>> I have found over 20 examples, that say just do this or that, but
>>> nothing works.
>>> Maybe my environment has a config issue?
>>>
>>> I would appreciate any any guidance on this.
>>> Thanks,
>>> Gary
>>>
>>>
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "emscripten-discuss" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/emscripten-discuss/56840ae5-46b1-458d-b30f-27ee5433fd39n%40googlegroups.com
>>>
>>> <https://groups.google.com/d/msgid/emscripten-discuss/56840ae5-46b1-458d-b30f-27ee5433fd39n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "emscripten-discuss" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>>
> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/emscripten-discuss/CAEX4NpQ21Yoyvy_xzrLkBTWmvEQoyVWc0fG3kAMmgx%3DmrhxE9g%40mail.gmail.com
>>
>> <https://groups.google.com/d/msgid/emscripten-discuss/CAEX4NpQ21Yoyvy_xzrLkBTWmvEQoyVWc0fG3kAMmgx%3DmrhxE9g%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>
--
You received this message because you are subscribed to the Google Groups
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/emscripten-discuss/4150937c-0859-47ea-bdb1-6c7ec7faff87n%40googlegroups.com.