rust程序靜態(tài)編譯的兩種方法實(shí)例小結(jié)
1. 概述
經(jīng)過我的探索,總結(jié)了兩種rust程序靜態(tài)編譯的方法,理論上兩種方法都適用于windows、mac os和linux(mac os未驗(yàn)證),實(shí)測方法一性能比方法二好,現(xiàn)總結(jié)如下,希望能夠幫到你.
2.方法一
2.1 添加配置文件
在項(xiàng)目的同級文件夾下新建“.cargo/config.toml”文件,根據(jù)使用的系統(tǒng),添加下面的配置
#windows [target.x86_64-pc-windows-msvc] rustflags = ["-C", "target-feature=+crt-static"]`
#linux [target.x86_64-unknown-linux-gnu] rustflags = ["-C", "target-feature=+crt-static"]
理論上mac os也可以,將[target.x86_64-unknown-linux-gnu]
替換為自己使用的工具鏈就可以了
2.2 打包運(yùn)行
2.2.1 winsows
在windows下運(yùn)行cargo build --release
就可以直接打包為靜態(tài)鏈接的程序了;
2.2.2 linux
在linux下運(yùn)行cargo build --release --target=x86_64-unknown-linux-gnu
,可能會出現(xiàn)如下提示/usr/bin/ld: cannot find -lxxx
,這是缺少gcc-libc的靜態(tài)庫文件
需要安裝的有兩個glibc-static
和libstdc++-static
;
在這里可以找到這兩個靜態(tài)庫: https://oraclelinux.pkgs.org/這里是oracle linux9 的鏈接:https://oraclelinux.pkgs.org/9/ol9-codeready-builder-x86_64/glibc-static-2.34-125.0.1.el9_5.8.x86_64.rpm.html, https://oraclelinux.pkgs.org/9/ol9-codeready-builder-x86_64/libstdc++-static-11.5.0-5.0.1.el9_5.x86_64.rpm.html
注意要選擇自己對應(yīng)的系統(tǒng)?。。?/strong>
頁面向下拉,有個install howto 的標(biāo)題,直接運(yùn)行里面的命令(如截圖里的dnf --enablerepo=ol9_codeready_builder install libstdc++-static
)就可以安裝了,安裝完就可以愉快的打包了;
3.方法二
此方法為使用musl庫打包為靜態(tài)鏈接,參考我的另一篇文章,實(shí)測該方法打包的靜態(tài)文件性能會比gcc稍差一點(diǎn);
使用musl將rust程序靜態(tài)編譯
4.總結(jié)
優(yōu)先推薦使用方法一,但據(jù)網(wǎng)友說方法一某些庫無法成功打包,此時可以考慮采用方法二的方式打包,但會有性能損失,需自行考量。
到此這篇關(guān)于rust程序靜態(tài)編譯的兩種方法實(shí)例小結(jié)的文章就介紹到這了,更多相關(guān)rust靜態(tài)編譯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust?use關(guān)鍵字妙用及模塊內(nèi)容拆分方法
這篇文章主要介紹了Rust?use關(guān)鍵字妙用|模塊內(nèi)容拆分,文中還給大家介紹use關(guān)鍵字的習(xí)慣用法,快速引用自定義模塊內(nèi)容或標(biāo)準(zhǔn)庫,以此優(yōu)化代碼書寫,需要的朋友可以參考下2022-09-09Rust使用csv crate構(gòu)建CSV文件讀取器的全過程
這篇文章主要學(xué)習(xí)如何基于Rust使用csv這個crate構(gòu)建一個CSV文件讀取器的過程,學(xué)習(xí)了csv相關(guān)的用法以及一些往期學(xué)過的crate的復(fù)習(xí),兼顧了實(shí)用性和Rust的學(xué)習(xí),需要的朋友可以參考下2024-05-05Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程
Rust中的Crate是編譯器處理的最小代碼單元,可以是二進(jìn)制或庫,每個Crate由一個CrateRoot文件(通常是src/main.rs或src/lib.rs)定義,本文給大家介紹Rust 中的 Packages 與 Crates模塊化構(gòu)建的基礎(chǔ)及開發(fā)流程,感興趣的朋友一起看看吧2025-02-02使用Cargo工具高效創(chuàng)建Rust項(xiàng)目
這篇文章主要介紹了使用Cargo工具高效創(chuàng)建Rust項(xiàng)目,本文有關(guān)Cargo工具的使用和Rust輸入輸出知識感興趣的朋友一起看看吧2022-08-08Go調(diào)用Rust方法及外部函數(shù)接口前置
這篇文章主要為大家介紹了Go調(diào)用Rust方法及外部函數(shù)接口前置示例實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06