Rust: ERROR_ON_UNDEFINED_SYMBOLS=1 рд╣рдореЗрд╢рд╛ emcc рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐рд╕реА рднреА рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдордИ 2017  ┬╖  1рдЯрд┐рдкреНрдкрдгреА  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрдВрдЧ рдХреЛрдб wasm32-рдЕрдЬреНрдЮрд╛рдд-рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди рд▓рдХреНрд╖реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ

extern {
  #[link(name="env")]
  fn log_event(id: *const u8);
}

fn main() {
    unsafe { log_event(::std::ptr::null()); }
}

рд╕рд╛рде рд╕реЗ

  error: unresolved symbol: log_event

рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВ, рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рднрдпрд╛рдирдХ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди #[link] рдмрд┐рдирд╛ kind=static рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ, рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдПрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рд╕реА рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ:

extern void log_event(void* ptr);

int main() {
    log_event(0);
}

emcc <source above.c> -O3 -s WASM=1 -s SIDE_MODULE=1 -o result.wasm
result.wasm . рдореЗрдВ рдЕрдЪреНрдЫреА рдЖрдпрд╛рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдирд╛

  (import "env" "_log_event" (func (;0;) (type 0)))

рддреЛ, рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рд╡рд╛рд╕рдо рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ? рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЗрд╕ рд▓рд┐рдВрдХрд░ ERROR_ON_UNDEFINED_SYMBOLS рддрд░реНрдХ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ?

рд╕реНрд░реЛрдд рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛:
https://github.com/rust-lang/rust/blob/ec27aa97b921957711b96e578c7c197ff28553ac/src/librustc_back/target/wasm32_unknown_emscripten.rs#L21

C-bug O-asmjs O-wasm

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@NikVolf рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк EMMAKEN_CFLAGS рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ emcc рддрд░реНрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
(рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо main.rs )

export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" 
rustc --target=wasm32-unknown-emscripten main.rs

>рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@NikVolf рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк EMMAKEN_CFLAGS рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ emcc рддрд░реНрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
(рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо main.rs )

export EMMAKEN_CFLAGS="-s ERROR_ON_UNDEFINED_SYMBOLS=0" 
rustc --target=wasm32-unknown-emscripten main.rs
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

modsec picture modsec  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Robbepop picture Robbepop  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cuviper picture cuviper  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pedrohjordao picture pedrohjordao  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

defuz picture defuz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ