๋ค์ 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
@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
๋ผ๊ณ ๊ฐ์ )