Rust: win10環境如何編譯bevy?


bevy是一個rust語言的跨平台游戲引擎,但是在windows10環境編譯時,遇到問題無數,幸盡數解決,記錄於此,供遇到同類問題的朋友參考:

環境:windows 10 + bevy 0.5.0 + rustup nightly版本

 

一、設置crates國內鏡像

crates.io官網國內訪問實在太慢,可在當前用戶的.cargo目錄下,創建名為config的文件

[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
# 這時換成自己偏好的源即可
replace-with = 'rustcc'

# 中國科技大學
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

# 清華大學
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

# 上海交通大學
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index"

# rustcc社區
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"

  

二、安裝vs2019 build tools

bevy book上明確說明windows環境需安裝VS2019 build tools (注意:必須是vs2019,最新的版本反而會編不過)

MS官網要找到vs2019,得費一番周章,點完一堆鏈接,還要登錄后,才能找到舊版本的下載地址

https://my.visualstudio.com/Downloads?q=visual%20studio%202019&wt.mc_id=o~msft~vscom~older-downloads

安裝完成后,需將64位的link.exe文件所在位置,加入到path環境變量中(重要!),我機器上安裝完是下面這個目錄 

C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Tools\MSVC\14.20.27508\bin\Hostx64\x64\

 

三、linking with `link.exe` failed: exit code: xxxx 問題

如果遇到類似下面的錯誤:

linking with `link.exe` failed: exit code: 1189
...
...
= note: Non-UTF-8 output: LINK : fatal error LNK1189: \xb3\xac\xb9\xfd 65535 \xb6\xd4\xcf\xf3\xb5\xc4\xbf\xe2\xcf\xde\xd6\xc6\r\n

看到這種出錯信息,通常頗感無助,但其實最后1行是有用的,只是由於編碼問題,看不出其中的含義,有一個簡單的辦法,倘若機器上安裝有python,直接用下面的2行代碼稍做處理

content = b"fatal error LNK1189: \xb3\xac\xb9\xfd 65535 \xb6\xd4\xcf\xf3\xb5\xc4\xbf\xe2\xcf\xde\xd6\xc6\r\n"
print(content.decode("gbk"))

可以看到

fatal error LNK1189: 超過 65535 對象的庫限制 

再根據這個信息,到網上一通搜索,終於找到某位高人留下的只言片語:

\.
│   Cargo.toml
│
├───.cargo
│       config.toml
│
└───src
        main.rs

在項目根目錄下,創建1個.cargo的目錄,然后里面放1個config.toml,內容為:

[target.x86_64-pc-windows-msvc]
linker = "rust-lld.exe"
rustflags = ["-Zshare-generics=off"]

先cargo clean,清空原來的target輸出,再運行cargo run,可能又會遇到下面的錯:

 error: the option `Z` is only accepted on the nightly compiler

意思是只有nightly版本,才能使用Z開頭的參數。

rustup install nightly

先運行這行命令,安裝nightly版本,然后將默認版本切換到nightly

rustup default nightly

注:如果希望切換回stable版本,只需運行rustup default stable即可。

可以輸入如下命令確認下版本:

rustc --version

筆者機器上,會輸出:

rustc 1.59.0-nightly (0b42deacc 2021-12-09)

這些弄完后,再運行

cargo clean
cargo run

應該就可以了,如果cargo clean時,遇到“target\xxx.dll 無法刪除”雲雲,手動干掉target目錄即可。

 

四、關於編譯慢的問題

bevy book上提到,強烈建議windows用戶安裝cargo-binutils

cargo install -f cargo-binutils
rustup component add llvm-tools-preview

然后項目的Cargo.toml里,

[dependencies]
bevy = { version = "0.5.0", features = ["dynamic"] }

寫上dynamic,這樣會大大提高編譯速度。

 

最后貼1個官方example的運行示例:

cargo run --example z_sort_debug


免責聲明!

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



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