On Tue, Dec 17, 2019 at 8:08 AM Mehdi Sabwat <[email protected]> wrote:
> Hi,
>
> I am trying to understand the expected behavior of Emscripten when we have
> a SIDE_MODULE that links to a standard library.
>
> I am having this message:
> Assertion failed: missing linked function `_emscripten_log`. perhaps a
> side module was not linked in? if this global was expected to arrive from
> a system library, try to build the MAIN_MODULE with EMCC_FORCE_STDLIBS=1
> in the environment
>
> with the following code :
>
> test1.c:
> #include <dlfcn.h>
> #include <stdio.h>
> #include <pthread.h>
> #include <emscripten.h>
>
> int main(int ac, char **av)
> {
> void *handle = dlopen("./libwasmdog.wasm", RTLD_LAZY);
> void (*fun_print_name)(const char *) = dlsym(handle, "print_name");
> fun_print_name(av[1]);
> /*
>
> emscripten_log(EM_LOG_CONSOLE, "removing this call will brake
> linking\n");
> emscripten_debugger();
>
> */
> return 0;
> }
>
> EMCC_FORCE_STDLIBS=1 emcc -g -s MAIN_MODULE=1 test1.c -o test.html --
> preload-file ./libwasmdog.wasm -s ALLOW_MEMORY_GROWTH=1
> and
> dog.c:
> #include "animal.h"
> #include <stdio.h>
> #include <stdlib.h>
> #include <emscripten.h>
>
> void print_name(const char *type)
> {
> emscripten_log(EM_LOG_JS_STACK, "\n");
> emscripten_debugger();
> printf("Je suis un %s\n", type);
> }
> emcc -g -s SIDE_MODULE=1 dog.c -o libwasmdog.wasm -s
> "EXPORTED_FUNCTIONS=['_emscripten_log',
> '_emscripten_debugger']"
>
> Is this a bug, or am I doing it wrong?
>
One this that looks wrong here is that you should be exporting
`print_name` from the side module.. Those emscripten functions are being
imported (in this case from JS).
However that doesn't explain why _emscripten_log would be undefined. One
thing you could try is calling `emscripten_log` from the main module too..
that would force the JS code for this function to be included. If that
fixes the problem then I guess you need to
`EXTRA_EXPORTED_RUNTIME_METHODS`. TBH I'm surprised this isn't already
included when building with MAIN_MODULE. I seems like all JS functions
should be included in that case, but I must be mis-remembering.
> Thank you!
>
> --
> 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/470197cd-6ade-440b-a945-9e271b09c77f%40googlegroups.com
> <https://groups.google.com/d/msgid/emscripten-discuss/470197cd-6ade-440b-a945-9e271b09c77f%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/CAL_va2_WuveDwGK1UEAq%3DopKnF_5eDqzpo3R_%3DQVr_Sz2gR%3DEQ%40mail.gmail.com.