如何在wasm32-unknown-unknown目标下用wasm-bindgen将Rust与C/C++编译链接至同一WASM二进制
Rust WASM 与 C 交互的 ABI 兼容性问题及当前进展
背景
wasm32-unknown-emscripten属于遗留编译目标,仅由一位兼职开发者维护,但过去它是唯一能同时编译并链接Rust和C库的目标。- Rust+WASM社区已广泛转向
wasm32-unknown-unknown目标,该目标与wasm-bindgen项目深度协作,生态中大量核心组件(包括winit、wgpu)都基于此构建,拥有完善的支持体系和文档。
核心问题
此前Rust编译器为 wasm32-unknown-unknown 生成的C ABI,与clang遵循规范的C ABI不兼容,这直接导致依赖Rust编译器的wasm-bindgen生成的WASM二进制,无法和合规C编译器产出的二进制完成链接。
当前生态现状与解决进展
该兼容性问题已取得关键突破:
- 2024年4月,Rust编译器团队在nightly版本中引入了一个临时不稳定的标志
--wasm_c_abi,启用后编译器会为WASM目标生成符合规范的C ABI。这个标志是过渡性的,未来会被移除,届时编译器将默认生成合规C ABI。 wasm-bindgen从0.2.88版本开始,已经完全支持这种合规C ABI。
内容的提问来源于stack exchange,提问作者Rafael Beckel
相关产品推荐
相关产品推荐

