执行trunk serve时rs_osrm编译失败:找不到crt1.o等库
解决Wasm编译rs_osrm时wasm-ld找不到系统库的问题
核心原因
rs_osrm是OSRM(C++路由引擎)的Rust绑定,依赖原生系统库。而trunk serve默认将项目编译为Wasm目标,Wasm运行时没有Linux系统的crt1.o、libc、libgcc这类原生库,因此链接阶段报错。你之前能正常运行rs_osrm,应该是编译到了x86_64-linux-gnu这类原生目标,而非Wasm。
解决方法
方法1:调整Trunk配置适配Wasm链接
在项目根目录创建或修改Trunk.toml,添加Wasm目标的链接参数,禁用系统库依赖:
[build] target = "wasm32-unknown-unknown" rustflags = ["-C", "link-arg=-nostdlib"]
注意:这种方法可能导致rs_osrm的C++依赖无法正常工作,因为OSRM官方没有提供预编译的Wasm版本。
方法2:改用原生目标运行(无需Wasm场景)
如果不需要Wasm输出,直接用Rust原生命令替代trunk:
- 构建项目:
cargo build - 运行项目:
cargo run
这会和你之前正常运行rs_osrm的环境保持一致。
方法3:编译Wasm版本的OSRM依赖(需Wasm场景)
若确实需要Wasm版本,需自行编译OSRM的Wasm库并调整绑定:
- 克隆OSRM仓库,用Emscripten编译为Wasm:
git clone https://github.com/Project-OSRM/osrm-backend.git cd osrm-backend && mkdir build && cd build emcmake cmake .. emmake make - 在你的Rust项目中,通过
build.rs指定链接编译好的Wasm版OSRM库。 - 可能需要fork rs_osrm仓库,修改绑定代码以适配Wasm环境。
方法4:更新工具链
确保系统安装完整的Wasm编译工具链,并更新trunk到新版本:
sudo apt install llvm clang libclang-dev rustup target add wasm32-unknown-unknown cargo install wasm-bindgen-cli --force cargo install trunk --force
内容的提问来源于stack exchange,提问作者Victor Hugo
相关产品推荐
相关产品推荐

