使用win10 wsl子系統(tǒng)如何將 rust 程序靜態(tài)編譯為linux可執(zhí)行文件
chapter Ⅰ 事情起因
最近在學(xué)習(xí)rust, 想把一部分java服務(wù)遷移至rust編寫,但由于公司服務(wù)器都是linux系統(tǒng),所以在找windows下交叉編譯為linux可執(zhí)行文件的方法,把bing首頁搜索的結(jié)果試了個(gè)遍都不行, 始終報(bào)錯(cuò)“musl-gcc”無法找到,搜遍全網(wǎng)都無法解決。 最終在我不斷嘗試的過程中逐漸發(fā)現(xiàn)解決辦法,遂將整個(gè)過程記錄下來。
chapter Ⅱ 安裝方法(windows安裝rust和vs code略過)
1. 啟用wsl 2
根據(jù)微軟的官方文檔,使用下面的命令會(huì)默認(rèn)安裝wsl2 并下載linux鏡像,整個(gè)過程可能會(huì)重啟一到兩次wsl --install
微軟官方文檔: https://learn.microsoft.com/zh-cn/windows/wsl/install下載好后打開微軟應(yīng)用商店,輸入你想裝的linux版本,點(diǎn)擊獲取
下載好后可以點(diǎn)擊啟動(dòng)或者打開,出現(xiàn)以下提示
不用理他,直接點(diǎn)擊右上角的關(guān)閉,這樣我們下次再打開就是使用的root用戶,不會(huì)創(chuàng)建多余的用戶和密碼,當(dāng)然也可以選擇根據(jù)提示創(chuàng)建用戶和密碼,使用起來除了一些命令需要加sudo之外沒有任何不同。
2. 添加開發(fā)環(huán)境
2.1. 打開rust官網(wǎng),復(fù)制以下命令,安裝rust工具鏈
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安裝完成后提示說環(huán)境變量還沒生效,手動(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)安裝過所以顯示如下圖
2.3. 安裝"musl-gcc"
打開musl官網(wǎng),https://musl.libc.org/ ,下載最新版的源代碼
將下載的壓縮包粘貼到子系統(tǒng)的home路徑下(其他路徑也可以)
直接復(fù)制粘貼,爽歪歪?。?!進(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è)提示說沒有c編譯器
不用慌,運(yùn)行下面這條命令,安裝開發(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)閉窗口,然后重新打開一個(gè)子系統(tǒng)窗口輸入musl-gcc -v
,如果正確顯示版本信息,則表示已經(jīng)安裝成功
3. linux靜態(tài)編譯
在主系統(tǒng)打開rust項(xiàng)目文件夾,按住shift鍵,點(diǎn)擊鼠標(biāo)右鍵,點(diǎn)擊在此處打開linux shell
開始編譯cargo build --release --target=x86_64-unknown-linux-musl
等待編譯完成,上傳服務(wù)器,運(yùn)行
enjoy it!
chapter Ⅲ 總結(jié)
因?yàn)橐郧皼]有編譯過c++項(xiàng)目,所以對編譯相關(guān)的知識(shí)知之甚少,通過本次的實(shí)踐嘗試,學(xué)到了一些編譯鏈接的知識(shí),留下一些微不足道的痕跡,希望對你有幫助。同時(shí)對于rust的編譯工具鏈表示你在干什么,msvc模式下的控制臺(tái)警告至今無法消除
到此這篇關(guān)于使用win10 wsl子系統(tǒng)將 rust 程序靜態(tài)編譯為linux可執(zhí)行文件的文章就介紹到這了,更多相關(guān)rust 程序靜態(tài)編譯為linux可執(zhí)行文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Rust?連接?PostgreSQL?數(shù)據(jù)庫的詳細(xì)過程
這篇文章主要介紹了Rust?連接?PostgreSQL?數(shù)據(jù)庫的完整代碼,本文圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01Rust 利用 chrono 庫實(shí)現(xiàn)日期和字符串互相轉(zhuǎn)換的示例
在Rust中,chrono庫提供了強(qiáng)大的日期和時(shí)間處理功能,使得日期與字符串之間的轉(zhuǎn)換變得簡單,本文介紹了如何在Rust中使用chrono庫將日期轉(zhuǎn)換成字符串,以及如何將字符串解析為日期,對于需要進(jìn)行日期時(shí)間格式化、解析或進(jìn)行時(shí)區(qū)處理的開發(fā)者來說,chrono庫是一個(gè)不可或缺的工具2024-11-11Rust語言之結(jié)構(gòu)體和枚舉的用途與高級(jí)功能詳解
Rust 是一門注重安全性和性能的現(xiàn)代編程語言,其中結(jié)構(gòu)體和枚舉是其強(qiáng)大的數(shù)據(jù)類型之一,了解結(jié)構(gòu)體和枚舉的概念及其高級(jí)功能,將使你能夠更加靈活和高效地處理數(shù)據(jù),本文將深入探討 Rust 中的結(jié)構(gòu)體和枚舉,并介紹它們的用途和高級(jí)功能2023-10-10Rust?搭建一個(gè)小程序運(yùn)行環(huán)境的方法詳解
rust是一門比較新的編程語言,2015年5月15日,Rust編程語言核心團(tuán)隊(duì)正式宣布發(fā)布Rust?1.0版本,本文給大家介紹Rust?搭建一個(gè)小程序運(yùn)行環(huán)境,以iOS?為例介紹開發(fā)環(huán)境的準(zhǔn)備,感興趣的朋友跟隨小編一起看看吧2022-05-05