Rust: ERROR_ON_UNDEFINED_SYMBOLS = 1 ํ•ญ์ƒ emcc์— ๋Œ€ํ•ด ์ „๋‹ฌ๋˜์–ด ๋™์  ์—ฐ๊ฒฐ์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 05์›” 04์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: rust-lang/rust

๋‹ค์Œ rust ์ฝ”๋“œ๋Š” wasm32-unknown-emscripten target์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

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 ๋™์  ๋งํฌ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์œ„ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ์— ์‹คํŒจํ•˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๊นŒ?

emscripten ์ž์ฒด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด C ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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
๊ฒฐ๊ณผ์— ๋ฉ‹์ง„ ๊ฐ€์ ธ ์˜ค๊ธฐ ํ•ญ๋ชฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Š” ๊ฒฐ๊ณผ wasm์— ๋™์  ๊ธฐํ˜ธ๋ฅผ ํฌํ•จ ํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ ์–ด๋„ ์–ด๋–ค ์‹œ์ ์—์„œ์ด ๋ง์ปค 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 ๋“ฑ๊ธ‰