[笔记] 在Rust中编译静态链接的可执行文件

2023 年 5 月 10 日 星期三(已编辑)
/ , , ,
513
AI 生成的摘要
最近尝试使用Rust写一些小工具给公司的项目使用,但是因为目标环境有时候比较复杂,正常输出的可执行文件经常会遇到缺少依赖项的问题。尝试使用musl代替gnu作为静态输出解决方案,但在WSL2-Ubuntu22.04环境中遇到了问题。另外,也了解到可以通过给rustc传递'-C target-feature=+crt-static'参数实现静态链接。发现自己在C语言和linux方面的知识还有欠缺。
这篇文章上次修改于 2023 年 5 月 10 日 星期三,可能部分内容已经不适用,如有疑问可询问作者。

[笔记] 在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的这些东西我果然还是欠缺太多知识了...

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...