為什么 Linux 裝個軟件還要自己編譯?一文講透背后的邏輯 前言
很多新手第一次裝 Linux 軟件時,都會遇到:下載源碼 → 配置 configure → make → make install
感覺好麻煩 ,為什么不像 Windows、macOS 點一下就裝好?
在 Linux 下,很多軟件確實會讓你“自己動手”編譯,這背后既有技術原因,也有生態習慣。簡單來說,這是 Linux 世界的“自由與多樣性”的副作用。
![]()
img Linux 軟件安裝方式
那我們先來看看Linux安裝軟件有哪些常用的方式
1.發行版包管理器
發行版包管理器(APT、YUM、DNF 等)
包管理器是 Linux 中最常見的安裝軟件方式,它通過管理和維護系統上的軟件包來簡化安裝和卸載過程。不同的 Linux 發行版使用不同的包管理工具。
例如:
Debian/Ubuntu 系列: sudo apt update # 更新包列表 sudo apt install # 安裝指定軟件包 sudo apt upgrade # 升級已安裝的軟件包 RedHat/CentOS 系列: sudo yum install # 安裝軟件包 sudo dnf install sudo yum install nginx包管理器通常會自動處理軟件依賴,安裝軟件時也會一起安裝所有需要的依賴庫。
2.從源碼編譯
Linux 用戶需要從源代碼編譯軟件,這種方式適用于那些沒有在包管理器中提供的特殊需求軟件,或是想要進行定制化編譯的用戶。
這種方式適用于需要更多控制的軟件或是沒有現成包的情況。
這個是我們今天詳細解釋的,下文有信息介紹。
3.第三方二進制包
在 Linux 中,除了通過源代碼安裝和使用包管理器安裝軟件外,還有一種常見的安裝方式是通過第三方二進制包。主要有兩種格式:
1. .deb (Debian 包)
2. .rpm (Red Hat 包)
這兩種格式的二進制包用于在不同的 Linux 發行版中安裝預編譯的應用程序和軟件包。它們通常由開發者或第三方發行者提供,幫助用戶繞過編譯源代碼的過程,直接安裝軟件。
例子:
? Google Chrome :Google 提供了
.deb格式的安裝包,用戶可以直接下載安裝并通過命令安裝:sudo dpkg -i google-chrome-stable_current_amd64.deb sudo apt --fix-broken install # 解決依賴問題
VLC Media Player:VLC 提供了 .rpm 包,適用于 Fedora 和 CentOS:
sudo dnf install vlc-*.rpm4.通用打包格式AppImageAppImage 是一種獨立的可執行軟件包,可以在 Linux 上運行,而不需要安裝或依賴其他庫。只需下載 .AppImage 文件,給予執行權限后即可運行。
例如:
chmod +x # 給予執行權限 ./ # 運行應用這種方式不需要依賴包管理器,適合那些不想或不能使用包管理器的用戶。
5.Docker 容器化應用
通過 Docker,用戶可以在隔離的容器中運行軟件,而不需要在系統上直接安裝。適用于一些需要依賴不同版本的程序,或是開發和測試環境。
安裝 Docker 后,可以通過 docker pull 下載并運行容器中的軟件。
docker pull # 下載鏡像 docker run -d # 運行容器6.從發行版鏡像安裝一些 Linux 發行版提供了專用的安裝軟件功能,用戶可以直接從 ISO 鏡像中安裝軟件包或應用,這通常適用于自定義安裝。
7.使用圖形化界面(GUI)工具
大多數 Linux 發行版都提供圖形化的包管理工具,如:
? Ubuntu Software Center 或 GNOME Software :可以通過圖形界面搜索并安裝軟件。
? Synaptic :一個功能更強大的包管理工具,適用于 Debian 系列的發行版。
這些工具對于不熟悉命令行的用戶非常方便。
Linux 軟件安裝方式對比
安裝方式
優點
缺點
適用場景
典型命令
發行版包管理器
(APT、YUM、DNF、Pacman 等)
- 一鍵安裝,自動解決依賴
- 有官方維護,安全性高
- 卸載/升級方便
- 版本可能落后
- 功能選項固定,無法定制
- 常用軟件
- 穩定優先
- 不追求最新版本
apt install nginx
yum install nginx
源碼編譯安裝
- 可定制功能(啟用/禁用模塊)
- 可針對硬件優化
- 獲取最新版本
- 編譯耗時長
- 依賴需手動解決
- 卸載不方便(需額外管理)
- 需要最新版本
- 特殊編譯選項
- 性能優化
./configure && make && sudo make install 第三方二進制包
(.deb / .rpm)
- 免編譯,直接安裝
- 比官方倉庫版本新
- 可能依賴沖突
- 安全性取決于來源
- 官方倉庫無此軟件
- 想省去編譯步驟
dpkg -i xxx.deb
rpm -ivh xxx.rpm
通用打包格式
(AppImage、Flatpak、Snap)
- 跨發行版運行
- 自帶依賴,免環境配置
- 體積大
- 啟動速度略慢
- 跨平臺分發
- 避免依賴地獄
./xxx.AppImage
flatpak install ...
容器化部署
(Docker、Podman)
- 完全隔離環境
- 一次構建,多處運行
- 易于遷移
- 需學習容器技術
- 占用額外資源
- 服務端部署
- 多環境一致性
docker run nginx
如何選擇安裝方式
? 優先 :包管理器(穩定、省心)
? 需要定制/最新 :源碼編譯
? 跨發行版分發 :AppImage / Flatpak / Snap
? 服務端或隔離環境 :Docker / Podman
? 臨時試用 :AppImage(無需安裝,直接運行)
回到我們開頭提的問題來,那Linux軟件為什么需要需要?
硬件與系統差異大
? Linux 不是一個單一系統,而是成百上千個發行版(Ubuntu、Debian、CentOS、Arch…),每個版本的 內核版本、庫版本、目錄結構 都可能不同。
? 如果直接發布一個二進制包,很可能在別的系統上運行不了(依賴缺失、庫版本不匹配)。
? 編譯時可以選擇啟用/禁用功能,比如
--enable-ssl、--without-gui。? 這樣可以裁剪掉不需要的功能,減少體積、提升性能。
? 編譯器可以針對你的 CPU 架構(x86_64、ARM、RISC-V…)做優化,比如
-march=native會用上本機 CPU 的全部指令集。? 對高性能計算、嵌入式設備尤其重要。
? 發行版的官方倉庫里,軟件版本可能落后半年甚至幾年。
? 從源碼編譯可以直接用上最新功能和 bug 修復。
? 很多開源協議(如 GPL)要求必須提供源代碼。
? 開發者直接發布源碼最省事,打包成二進制反而是額外工作。
# 1. 下載源碼 wget https://example.com/software.tar.gz tar -xzf software.tar.gz cd software # 2. 配置(檢查依賴、選擇功能) ./configure --prefix=/usr/local --enable-feature-x # 3. 編譯 make -j$(nproc) # 4. 安裝 sudo make install其中 ./configure 會生成 Makefile,make 按照它編譯,make install 復制到系統目錄3。那為什么有些軟件不用編譯?
? 如果你用
apt install、yum install、dnf install,其實是安裝了 發行版維護者 提前編譯好的二進制包。? 但如果這個軟件 沒被打包 ,或者你需要 特殊編譯選項 ,就只能自己編譯。
? 優先用包管理器 (apt、yum、dnf、pacman),省時省心。
? 需要定制或最新版本 → 用源碼編譯。
? 怕麻煩 → 先找有沒有別人打好的
.deb、.rpm或 AppImage。? 頻繁編譯 → 學會用
checkinstall或stow管理源碼安裝,方便卸載和升級。
在 Linux系統的世界里,沒有唯一的“正確”安裝方式,只有最適合當下需求的選擇。 包管理器帶來穩定與省心,源碼編譯賦予自由與性能,通用打包和容器化則讓跨平臺與隔離部署成為可能。掌握這些方法,就像掌握了多把鑰匙——面對不同的系統環境與業務場景,你都能快速找到那一把最合適的,打開效率與穩定的大門。
寫文不易,如果你都看到了這里,請點個贊和在看,分享給更多的朋友;也別忘了關注星哥玩云!這里有滿滿的干貨分享,還有輕松有趣的技術交流~點個贊、分享給身邊的小伙伴,一起成長,一起玩轉技術世界吧!
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.