[笔记] 在Rust中编译静态链接的可执行文件
最近尝试使用Rust写一些小工具给公司的项目使用,但是因为目标环境有时候比较复杂,正常输出的可执行文件经常会遇到缺少依赖项的问题,所以我就想到了静态输出。
我的第一反应是使用musl代替gnu。但是在尝试了很久之后发现,我的开发环境是WSL2-Ubuntu22.04,在这个环境里面使用musl工具链会有大量的无法找到库的问题。我看到有人提到musl在常见的非musl集成的发行版上面可能需要额外的配置,因为不太了解,我在这个方向上没有花太多时间。
转头看,有人提到了给rustc传递一个-C target-feature=+crt-static
参数可以实现静态链接。我最开始是写在Cargo.toml中的,但是build的时候总是提示无用键。最后,使用环境变量的方式,并且成功了。
RUSTFLAGS='-C target-feature=+crt-static' cargo build --release --target x86_64-unknown-linux-gnu
C语言和linux的这些东西我果然还是欠缺太多知识了...