el siguiente código rust no se compila con el destino wasm32-unknown-emscripten
extern {
#[link(name="env")]
fn log_event(id: *const u8);
}
fn main() {
unsafe { log_event(::std::ptr::null()); }
}
con
error: unresolved symbol: log_event
corríjame si me equivoco, podría estar terriblemente mal con esto, pero #[link]
sin kind=static
implica un enlace dinámico, y el código anterior no debería fallar en la compilación.
En cuanto a emscripten en sí, no tiene problemas para compilar código C como este:
extern void log_event(void* ptr);
int main() {
log_event(0);
}
con emcc <source above.c> -O3 -s WASM=1 -s SIDE_MODULE=1 -o result.wasm
produciendo una buena entrada de importación en result.wasm
(import "env" "_log_event" (func (;0;) (type 0)))
Entonces, la pregunta es, ¿hay alguna opción para tener símbolos dinámicos en el wasm resultante? ¿O al menos anular este argumento del enlazador ERROR_ON_UNDEFINED_SYMBOLS
en algún momento?
enlace de origen sería:
https://github.com/rust-lang/rust/blob/ec27aa97b921957711b96e578c7c197ff28553ac/src/librustc_back/target/wasm32_unknown_emscripten.rs#L21
@NikVolf en realidad puede anular los argumentos emcc con la ayuda de la variable de entorno EMMAKEN_CFLAGS
.
(asumiendo que su nombre de archivo es main.rs
)
export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0"
rustc --target=wasm32-unknown-emscripten main.rs
Comentario más útil
@NikVolf en realidad puede anular los argumentos emcc con la ayuda de la variable de entorno
EMMAKEN_CFLAGS
.(asumiendo que su nombre de archivo es
main.rs
)