以下 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
参数?
@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
)