A. 編譯openwrt程序報錯
主要原因可能上是因為內存不足, 臨時使用交換分區來解決 sudo dd if=/dev/zero of=/swapfile bs=64M count=16 sudo mkswap /swapfile sudo swapon /swapfile 編譯結束後關閉並刪除 sudo swapoff /swapfile sudo rm /swapfile
B. 2020-12-24 (一)Rust 入坑安裝、修改國內源、使用musl、優化二進制文件等
為以往項目開發 http api ,准備使用rust開發嘗個鮮,看是否有應用到其他項目中的可能性,本系列內容均為一步一步入坑的實況,未來有時間可能整理的更為系統性,目前僅作記錄。
由於需要支持各個發行版 linux,目前的想法是採用 musl 平台編譯100%靜態鏈接的可執行文件,盡量單文件發布。
文件為靜態鏈接,未優化,包含調試信息,未經 strip,大小 3687136
優化配置完全參考 https://www.aloxaf.com/2018/09/rece_rust_size/ 此文章,在此表示感謝。
文件為靜態鏈接,包含調試信息,未經 strip,大小 1731352
文件為靜態鏈接,不包含調試信息,stripped,大小 292264
Rust 安裝、驗證完畢。
C. linux下的musl C庫靠譜嗎
musl的主要目標是跨平台,減少底層依賴,比如移植到新的os。
性能的話就字元串這塊來說,glibc的效率更高。
不同的庫最好重新編譯,因為有些是宏,比如strlen("hello");glibc會直接變成5
D. 編譯openwrt出現這個錯誤,有人知道怎麼解決嗎
首先, 安裝完依賴(並不是所有的依賴都被腳本檢查), 請參考 OpenWrt Buildroot 然後, 請使用較新的linux發行版, 因為openwrt比較新, 所以相應的host編譯主機也要比較新才行. 最後, 在網路通暢情況下編譯, 再運行一次make V=s試試
E. 靜態編譯的好處
編譯的時候默認都不是靜態編譯,
這樣編譯出來軟體換到其他機器上可能就運行不了了。
比如在ubuntu 16.04 上面編譯的軟體就不能在 ubuntu 20.04 上面運行。
這里主要的問題出在 glibc 這個庫的版本不一致。
靜態編譯的時候,應用程序包含所有的內容,放在不同的機器上面都能運行。
我們靜態編譯的時候,我們使用 musl-libc 一個小型嵌入式的 libc 庫。
靜態編譯有的軟體可以運行在不同的系統裡面如 ubuntu:16.04 20.04 centos 等系統。