le code rouille suivant ne parvient pas à se compiler avec la cible wasm32-unknown-emscripten
extern {
#[link(name="env")]
fn log_event(id: *const u8);
}
fn main() {
unsafe { log_event(::std::ptr::null()); }
}
avec
error: unresolved symbol: log_event
corrigez-moi si je me trompe, je me trompe peut-être terriblement, mais #[link]
sans kind=static
implique un lien dynamique, et le code ci-dessus ne devrait pas manquer de compiler ?
Quant à emscripten lui-même, il n'a aucun problème à compiler du code C comme celui-ci :
extern void log_event(void* ptr);
int main() {
log_event(0);
}
avec emcc <source above.c> -O3 -s WASM=1 -s SIDE_MODULE=1 -o result.wasm
produire une belle entrée d'importation dans le résultat.wasm
(import "env" "_log_event" (func (;0;) (type 0)))
Donc, la question est, y a-t-il une option pour avoir des symboles dynamiques dans le wasm résultant ? Ou au moins remplacer cet argument ERROR_ON_UNDEFINED_SYMBOLS
éditeur
le lien source serait :
https://github.com/rust-lang/rust/blob/ec27aa97b921957711b96e578c7c197ff28553ac/src/librustc_back/target/wasm32_unknown_emscripten.rs#L21
@NikVolf en fait, vous pouvez remplacer les arguments emcc à l'aide de la variable d'environnement EMMAKEN_CFLAGS
.
(en supposant que votre nom de fichier est main.rs
)
export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0"
rustc --target=wasm32-unknown-emscripten main.rs
Commentaire le plus utile
@NikVolf en fait, vous pouvez remplacer les arguments emcc à l'aide de la variable d'environnement
EMMAKEN_CFLAGS
.(en supposant que votre nom de fichier est
main.rs
)