2016-05-17 59 views
6

使用Creating a basic webservice in RustTaking Rust everywhere with rustup的文檔,我已經設法成功編譯一個64位的靜態二進制鐵鏽:如何構建一個帶鏽和鏽的32位靜態二進制文件?

rustup target add x86_64-unknown-linux-musl 
cargo build --target=x86_64-unknown-linux-musl 

但我似乎無法找出如何建立一個32位的靜態二進制。

我在運行rustc --print target-list時找到了目標,只是在運行rustup target list時發現它不可用。

我錯過了什麼東西,或者它不可能嗎?

+0

是i686的未知Linux的GNU的工作? – tafia

+0

據我所知,它不會靜態鏈接libc。 –

回答

5

的標準二進制文件僅在Rust 1.10或更高版本上可用。您可以i686用下面的命令創建靜態二進制:

$ rustup default stable # stable must at least 1.10 
$ rustup target add i686-unknown-linux-musl 
$ cargo build --target i686-unknown-linux-musl 

生成的可執行文件可以在target/i686-unknown-linux-musl/debug/target/i686-unknown-linux-musl/release/被發現。

我們可以檢查生成的二進制是靜態的,其中ldd鏈接:

$ ldd target/i686-unknown-linux-musl/debug/main 
not a dynamic executable 
+0

我曾嘗試過(以穩定的1.10版本爲例),但它創建了一個動態鏈接的二進制文件。我錯過了什麼嗎?編譯是好的,但是當我運行ldd時,我發現它是動態鏈接的。 –

+0

@AndreiOprisan更新了答案。 – malbarbo

+0

對於剛剛生成的項目,就像您所說的那樣工作,對於具有更多動態鏈接的依賴項目。我應該粘貼toml文件嗎? –