Rust交叉編譯Mac編譯Linux/Windows平台


關於交叉編譯

一般編程階段用的是Windows或者Mac系統,部署平台是Linux,這種情況下就需要使用Cross-Compiler交叉編譯,意思是可以在當前平台Host下編譯出目標平台target的可執行文件,

尤其是做ARM平台開發的同學對這個更為熟悉。

Rust交叉編譯在Github上有一個文檔Rust核心員工Jorge Aparicio提供的一份文檔https://github.com/japaric/rust-cross,推薦大家仔細的讀一讀。

如果要求比較簡單,都是X86_64架構,從Mac上編譯出unknow-linux/pc-windows-gnu就好。

musl工具鏈(編譯Linux環境程序所需)

musl實現了Linux libc,質量可靠,適配所有Linux環境,使用靜態連接替換動態鏈接,這樣就能打出一個完整的二進制文件,可以丟到任何Linux環境里運行。

當然,關於靜態鏈接與動態鏈接各有優缺點,這里不細說。

安裝一下

rustup target add x86_64-unknown-linux-musl

安裝musl-cross

brew install filosottile/musl-cross/musl-cross

windows-gnu相關(編譯Windows環境程序所需)

安裝windows-gnu,

用msvc容易編譯失敗,msvc其實就是指編譯出來的程序直接依賴Windows平台的基礎庫,而gnu的則是開源的基礎庫直接內嵌到咱們編譯的程序里,所以msvc的程序要更小。

rustup target add x86_64-pc-windows-gnu

安裝mingw-w64

brew install mingw-w64

 

Rust程序示例

main.rs

fn main() {
  println!("Hello, world!\r\nwww.qttc.net\r\n");
}

 

配置和打包編譯

配置config

vi ~/.cargo/config(沒有新建即可,另外可在項目根目錄下創建.cargo/config文件,只對當前項目生效)

內容如下:

[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-gcc-ar"

 

編譯(Linux環境程序)

cargo build --release --target x86_64-unknown-linux-musl

可把編譯命令寫到腳本中:

編譯命令整理為sh可執行文件腳本(package_linux.sh,放在項目根目錄,給與執行權限chmod +x package_linux.sh)如下:

if [[ $(echo $0 | awk '/^\//') == $0 ]]; then
    ABSPATH=$(dirname $0)
else
    ABSPATH=$PWD/$(dirname $0)
fi
cd ${ABSPATH}
cargo build --release --target x86_64-unknown-linux-musl

編譯出來后在target里會有個x86_64-unknown-linux-musl目錄,里面又根據--release有debug和release目錄,其中名為項目名的文件就是打包出來的Linux環境程序軟件。

 

編譯(Windows環境程序)

cargo build --release --target x86_64-pc-windows-gnu

也可把編譯命令寫到腳本中:

編譯命令整理為sh可執行文件腳本(package_win.sh,放在項目根目錄,給與執行權限chmod +x package_win.sh)如下:

if [[ $(echo $0 | awk '/^\//') == $0 ]]; then
    ABSPATH=$(dirname $0)
else
    ABSPATH=$PWD/$(dirname $0)
fi
cd ${ABSPATH}
cargo build --release --target x86_64-pc-windows-gnu

編譯出來后在target里會有個x86_64-pc-windows-gnu目錄,里面又根據--release有debug和release目錄,其中xxx.exe為打包出來的Windows環境程序軟件。

 

 

參考:
1. https://www.qttc.net/529-rust-cross-compile-mac-to-linux.html

2. https://www.cnblogs.com/silentdoer/p/13024037.html

3. https://blog.csdn.net/weixin_32827751/article/details/113998427

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM