Rust: ERROR_ON_UNDEFINED_SYMBOLS=1 总是传递给 emcc 有效地防止任何动态链接

创建于 2017-05-04  ·  1评论  ·  资料来源: rust-lang/rust

以下 Rust 代码无法使用 wasm32-unknown-emscripten 目标进行编译

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
在 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 等级

相关问题

wthrowe picture wthrowe  ·  3评论

drewcrawford picture drewcrawford  ·  3评论

mcarton picture mcarton  ·  3评论

dtolnay picture dtolnay  ·  3评论

dwrensha picture dwrensha  ·  3评论