使用win10 wsl子系統(tǒng)如何將 rust 程序靜態(tài)編譯為linux可執(zhí)行文件
chapter Ⅰ 事情起因
最近在學(xué)習(xí)rust, 想把一部分java服務(wù)遷移至rust編寫,但由于公司服務(wù)器都是linux系統(tǒng),所以在找windows下交叉編譯為linux可執(zhí)行文件的方法,把bing首頁(yè)搜索的結(jié)果試了個(gè)遍都不行, 始終報(bào)錯(cuò)“musl-gcc”無(wú)法找到,搜遍全網(wǎng)都無(wú)法解決。 最終在我不斷嘗試的過(guò)程中逐漸發(fā)現(xiàn)解決辦法,遂將整個(gè)過(guò)程記錄下來(lái)。
chapter Ⅱ 安裝方法(windows安裝rust和vs code略過(guò))
1. 啟用wsl 2
根據(jù)微軟的官方文檔,使用下面的命令會(huì)默認(rèn)安裝wsl2 并下載linux鏡像,整個(gè)過(guò)程可能會(huì)重啟一到兩次wsl --install微軟官方文檔: https://learn.microsoft.com/zh-cn/windows/wsl/install下載好后打開(kāi)微軟應(yīng)用商店,輸入你想裝的linux版本,點(diǎn)擊獲取



下載好后可以點(diǎn)擊啟動(dòng)或者打開(kāi),出現(xiàn)以下提示

不用理他,直接點(diǎn)擊右上角的關(guān)閉,這樣我們下次再打開(kāi)就是使用的root用戶,不會(huì)創(chuàng)建多余的用戶和密碼,當(dāng)然也可以選擇根據(jù)提示創(chuàng)建用戶和密碼,使用起來(lái)除了一些命令需要加sudo之外沒(méi)有任何不同。
2. 添加開(kāi)發(fā)環(huán)境
2.1. 打開(kāi)rust官網(wǎng),復(fù)制以下命令,安裝rust工具鏈
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安裝完成后提示說(shuō)環(huán)境變量還沒(méi)生效,手動(dòng)source一下或者直接關(guān)掉重新啟動(dòng)子系統(tǒng)窗口

完成后運(yùn)行rustup -V查看一下rust的相關(guān)版本信息

2.2. 安裝rust的linux靜態(tài)編譯工具,等待安裝完成
rustup target add x86_64-unknown-linux-musl因?yàn)槲乙呀?jīng)安裝過(guò)所以顯示如下圖

2.3. 安裝"musl-gcc"
打開(kāi)musl官網(wǎng),https://musl.libc.org/ ,下載最新版的源代碼

將下載的壓縮包粘貼到子系統(tǒng)的home路徑下(其他路徑也可以)

直接復(fù)制粘貼,爽歪歪!?。∵M(jìn)入子系統(tǒng),cd /home,然后執(zhí)行tar -zxvf musl-1.2.5.tar.gz解壓縮,下載的哪個(gè)版本就解壓哪個(gè)版本依次等待執(zhí)行cd musl-1.2.5,./configure, make, make install./configure運(yùn)行后可能會(huì)出現(xiàn)這個(gè)提示說(shuō)沒(méi)有c編譯器

不用慌,運(yùn)行下面這條命令,安裝開(kāi)發(fā)套件,安裝完畢后繼續(xù)執(zhí)行./configure以及后面的命令yum groupinstall "Development Tools"
2.4. 將"musl-gcc"加入環(huán)境變量
執(zhí)行 vi /etc/profile, 將export PATH=$PATH:/usr/local/musl/bin/;加入到文件最后,關(guān)閉并保存

保存后關(guān)閉窗口,然后重新打開(kāi)一個(gè)子系統(tǒng)窗口輸入musl-gcc -v,如果正確顯示版本信息,則表示已經(jīng)安裝成功

3. linux靜態(tài)編譯
在主系統(tǒng)打開(kāi)rust項(xiàng)目文件夾,按住shift鍵,點(diǎn)擊鼠標(biāo)右鍵,點(diǎn)擊在此處打開(kāi)linux shell

開(kāi)始編譯cargo build --release --target=x86_64-unknown-linux-musl等待編譯完成,上傳服務(wù)器,運(yùn)行

enjoy it!
chapter Ⅲ 總結(jié)
因?yàn)橐郧皼](méi)有編譯過(guò)c++項(xiàng)目,所以對(duì)編譯相關(guān)的知識(shí)知之甚少,通過(guò)本次的實(shí)踐嘗試,學(xué)到了一些編譯鏈接的知識(shí),留下一些微不足道的痕跡,希望對(duì)你有幫助。同時(shí)對(duì)于rust的編譯工具鏈表示你在干什么,msvc模式下的控制臺(tái)警告至今無(wú)法消除

到此這篇關(guān)于使用win10 wsl子系統(tǒng)將 rust 程序靜態(tài)編譯為linux可執(zhí)行文件的文章就介紹到這了,更多相關(guān)rust 程序靜態(tài)編譯為linux可執(zhí)行文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust整合Elasticsearch的詳細(xì)過(guò)程(收藏)
Elasticsearch是基于Lucene構(gòu)建的開(kāi)源分布式搜索和分析引擎,支持水平擴(kuò)展和多語(yǔ)言調(diào)用,ELK(Elastic Stack)組合包括Elasticsearch、Kibana、Logstash和Beats,專注于日志數(shù)據(jù)分析和實(shí)時(shí)監(jiān)控,本文介紹Rust整合Elasticsearch的過(guò)程,一起看看吧2024-11-11
Rust 通過(guò)異步實(shí)現(xiàn)并發(fā)的方法示例
本文主要介紹了Rust 通過(guò)異步實(shí)現(xiàn)并發(fā)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-06-06
Rust for循環(huán)語(yǔ)法糖背后的API場(chǎng)景分析
for語(yǔ)句是一種能確定循環(huán)次數(shù)的循環(huán),for 語(yǔ)句用于執(zhí)行代碼塊指定的次數(shù),今天通過(guò)本文給大家介紹Rust for循環(huán)語(yǔ)法糖背后的API場(chǎng)景分析,感興趣的朋友跟隨小編一起看看吧2022-11-11
Rust可迭代類型迭代器正確創(chuàng)建自定義可迭代類型的方法
在 Rust 中, 如果一個(gè)類型實(shí)現(xiàn)了 Iterator, 那么它會(huì)被同時(shí)實(shí)現(xiàn) IntoIterator, 具體邏輯是返回自身, 因?yàn)樽陨砭褪堑?這篇文章主要介紹了Rust可迭代類型迭代器正確創(chuàng)建自定義可迭代類型的方法,需要的朋友可以參考下2023-12-12
Rust 堆內(nèi)存指針 Box的實(shí)現(xiàn)示例
在 Rust 中,Box<T>是最基礎(chǔ)、最簡(jiǎn)潔的智能指針,核心作用是將數(shù)據(jù)從棧內(nèi)存轉(zhuǎn)移到堆內(nèi)存,并通過(guò)獨(dú)占所有權(quán)機(jī)制管理堆內(nèi)存的分配與釋放,下面就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2026-04-04

