Multiarch概念調查
由於設計需要,花了一點時間調查了一下Multiarch的概念,作為筆記放在這裡。
Multiarch是Debian髮型版提出的概念,涉及所有基於Debian實現的發行版,比如Ubuntu。基礎的定義文件在這裡:Multiarch - Debian Wiki ,用於在一個平臺(arch)上安裝多個平臺的開發執行庫,比如在AMD64的系統上安裝i386,ARM64的開發庫(包括標頭檔案)。很明顯,這對在本地進行交叉編譯會帶來很多好處。
交叉編譯的包和應用使用GNU三元組表示不同的TARGET,避免名稱和目錄衝突,例如:aarch64-linux-gnu,但如果還有其他配置差異,允許增加字尾,例如:aarch64-linux-gnu_ilp32。這個表達不再稱為GNU Triple,而稱為Multiarch Tuple。
Debian的本地應用遵循FHS,開發庫通常在/lib或者/usr/lib中(以下簡稱$prefix/lib),增加multiarch支援後,庫的後面增加Tuple:$prefix/lib/<tuple>。FHS中的/lib32,/lib64等目錄定義,轉化為對$prefix/lib/<tuple>的連結。
標頭檔案放在$prefix/include/<tuple>中。
Debian明確說不支援應用,但有一個同時是程式也是庫的東西(ld.so)會遵循前面對庫的定義。Ubuntu有一份文件對這個設計有更詳細的定義:MultiarchSpec - Ubuntu Wiki ,似乎要嘗試支援多平臺的包可以混裝,但似乎邏輯並沒有自恰。
(在沒有應用支援的情況下,你的應用需要自行找一個root來安裝,然後看用什麼翻譯器來執行,比如qemu-aarch64 -L $prefix/lib/<aarch64-linux-gnu/ path_to_my_app這樣。)
簡單判斷,短期內,這個特性不太能夠依靠。要做交叉系統,還是自己圍繞工具鏈建所有的依賴比較實際。我原來以為它可以借用其他arch的本地編譯的包用到本地系統上,看來是我想多了。