mold 3.0 發布:高速連結器完成 Rust 重寫

mold 專輯於 2026 年 10 月 5 日發布 mold 3.0.0,這是高速連結器完成由 C++ 重寫為 Rust 後的第一個版本。官方指出,重寫計劃早於 2.42.1 版本的發布說明中公開,而 2.42.1 是 C++ 版本的最後一個版本。[1]

目標與相容性

官方表示,mold 3.x 的目標是縮窄與 GNU ld 之間殘留的相容性距離,尤其在連結器腳本支援方面,並為 mold 被 Linux 發行版採用為預設連結器鋪路。[1]

官方強調,mold 3.0 旨在成為 2.42.1 的直接替代品:接受相同的命令列選項、支持相同的目標架構,除下文列出的錯誤修正外,輸出一致,連結效能也與 2.42.1 相似。官方以多種方式驗證相容性,包括在每個受支援目標上執行測試套件、在廣泛的真實工作負載與選項組合下比較連結器輸出,以及建構所有 Gentoo 軟體包,結果未發現回歸。[1]

官方又指出,改用 Rust 後,mold 在處理惡意輸入檔案時更安全:C++ 版本在遇到這類輸入時可能越界讀取記憶體並以分段錯誤崩潰;在 mold 3.0 中,這些讀取受邊界檢查保護,因此 mold 會在被存取的位置拋出 panic 而停止。[1]

建置方式改變

官方列出多項建置層面的變動。[1]

mold 現以 Cargo 而非 CMake 建置,需要 Rust 1.95 或以上版本及一個 C 編譯器;建置指令為 cargo build --release,安裝用 ./install-mold.sh,且安裝腳本接受 PREFIX 與 DESTDIR。原有的 CMake 選項已被移除。[1]

若把 mold 的程式庫安裝到 $PREFIX/lib 以外的目錄(例如 /usr/lib64),需在建置與安裝時同時設定 MOLD_LIBDIR 環境變數,令 mold -run 能找到 mold-wrapper.so。[1]

依賴方面,mold 不再依賴 oneTBB,仍然靜態連結 mimalloc 3.5.3,並可透過 --features system-allocator 改用系統的 malloc;mold 會在可用時連結系統 zlib,並內含 zstd 與 BLAKE3,亦可設定 ZSTD_SYS_USE_PKG_CONFIG=1 連結系統 zstd。原有的 MOLD_TARGETS CMake 變數改以 Cargo features 取代,官方建議發布版如以往一樣為所有目標建置 mold;測試套件也改以 cargo test 執行。[1]

錯誤修正與相容性改善

官方列出多項修正,包括:修正以版本腳本或 --default-symver 建立靜態連結執行檔時的崩潰;修正輸出檔同時是輸入檔(例如 mold -r -o foo.o foo.o bar.o)時的崩潰或輸出損壞;--gc-sections 不再移除由 --init 與 --fini 指定的函數;同名但大小不同的 common symbol 現在會採用最大尺寸與最嚴格對齊,與 GNU ld 及 lld 一致;--icf=safe 不再誤合由共享程式庫產生的函數,--icf=all 也不再與 --emit-relocs 同時崩潰;共享程式庫中的版本化引用(如 foo@VER)不再拉入無版本的 foo 作為封裝成員。[1]

官方還修正數項非確定性輸出的情況,涉及 --dependency-file、--repro、帶大量同名 COMDAT 群組的 -r,以及部分動態重定位。[1]

專業狀況

官方在發布說明中感謝贊助者,並列出每月贊助 32 美元以上的機構與個人,包括 Cybozu、SAP、Mercedes-Benz Group、Signal Slot、Mercury、G-Research 開源跟蹤、Ahrefs 等。[1][2]

參考資料

[1] GitHub — mold 3.0.0 官方發布說明(2026 年 10 月 5 日)

[2] GitHub — rui314/mold 官方專屬倉庫

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*