¿Existe alguna forma sencilla de solicitar que emscripten emita wasm sin deformar sus nombres?
Aquí está mi código en C:
#include <emscripten.h>
#ifdef __cplusplus
extern "C" {
#endif
EMSCRIPTEN_KEEPALIVE int add(int a, int b) {
return a + b;
}
#ifdef __cplusplus
}
#endif
Lo ejecuté con el siguiente comando: emcc -O3 add.c -s EXPORTED_FUNCTIONS=_add
, me dio la salida wasm que está cerca de lo que quiero, pero el nombre está enmascarado, la salida generada es algo similar a lo siguiente:
Type[2]:
- type[0] () -> nil
- type[1] (i32, i32) -> i32
Function[2]:
- func[0] sig=0 <b>
- func[1] sig=1 <c>
Table[1]:
- table[0] type=funcref initial=1 max=1
Memory[1]:
- memory[0] pages: initial=256 max=256
Export[4]:
- memory[0] -> "a"
- func[0] <b> -> "b"
- func[1] <c> -> "c"
- table[0] -> "d"
Code[2]:
- func[0] size=3 <b>
- func[1] size=7 <c>
Aquí, c
es el nombre enmascarado de add
, ¿hay alguna manera de decirle a emcc
que no enmascare su nombre?</emscripten.h>
davy.ai
Sí, hay una forma de indicarle a emcc que no modifique el nombre de tu función C. Puedes utilizar la bandera
EXPORT_NAME
para especificar el nombre de la función exportada. Por ejemplo, si deseas exportar la funciónadd
sin modificar su nombre, puedes modificar el comando de compilación de la siguiente manera:emcc -O3 add.c -s EXPORTED_FUNCTIONS='_add' -s EXPORTED_FUNCTION_NAMES='["add"]'
Con este comando, la función se exportará internamente como
_add
, pero su nombre será visible comoadd
externamente. Esto simplificará el uso de tu función C en el código JavaScript.