爲什麼linux平臺下軟件安裝不是雙擊執行

  首先要說一下,很多Linux的發行版例如Ubuntu或者CentOS、Fedora等,是可以雙擊安裝自己發行版的安裝包的,例如deb、rpm等。

  那麼爲什麼現在大部分軟件還是需要下載一個tar.gz然後./configure/make/make install繁瑣的命令安裝呢?

  其實,Linux下跟Windows的軟件發佈有一個最大的不同就是Linux下大部分軟件都是開源的,只提供源碼下載,不提供編譯好的二進制下載。所以,上面的三個命令實際上是編譯一個軟件,然後拷貝到系統對應目錄,準確來說不是安裝。

  但是爲什麼非要這三個命令,而不是雙擊之後自動執行上述三個命令呢?

  主要還是跨平臺和定製化的考慮。我們知道Linux發行版衆多,Linux支持的平臺也很多,從使用最多的x86到arm,solaris等,所以這個./configure腳本可以支持很多編譯參數,從而讓軟件支持幾乎所有的硬件平臺。

  而Windows下,由於幾乎所有軟件都是編譯好的二進制打包發佈,所以軟件要麼是32位版本,要麼是64位版本不能通用的。好在Windows目前只支 持x86和x64兩個硬件平臺,假若以後Windows支持其他平臺,那麼我們日常軟件的版本區分就要更多了。而Linux下只要發佈一個源碼包,你用戶 是什麼硬件平臺自己編譯好了。

  另外稍微學過軟件工程的都知道,軟件開發都是模塊化的,通過./configure命令加上合理參數,可以不編譯不需要的模塊,比如最常用的php,自帶幾十個模塊,通常我們需要哪個編譯哪個好了。

  有人可能說Windows安裝軟件也能選擇性安裝,我可以不安裝我不需要的模塊。

  其實,Windows就算你不安裝你選擇的模塊,那也只是這個模塊不安裝。而主程序的模塊訪問是編譯好的,他只不過能自動判斷這個模塊不存在就不加載罷了。

  另外,Linux很多模塊是通用的,這就是依賴關係,舉例來說要用php的iconv功能,就需要系統安裝libiconv庫,而不同的電腦的 libiconv庫安裝路徑不同,所以需要通過./configure的參數指定你電腦的libiconv安裝路徑是多少,php才能順利編譯通過。 Windows則是必須在C:WindowsSystem32下,可定製化太差了。

  再說一下make命令。make命令就是根據剛纔./configure的配置參數,來把源碼編譯成二進制文件,放到當前目錄,而不是複製到系統目錄。爲什麼不能把make和make install放在一起呢?

  因爲有些時候,我們只需要一個軟件包裏面的某個動態鏈接庫,而不是整個程序。比如我們經常需要lighttpd中的spawn-fcgi,所以我們不必安裝lighttpd,而是直接編譯完,得到其中的spawn-fcgi即可。

  最後,make install就是把編譯好的二進制文件和鏈接庫、配置文件等複製到系統的各個目錄即可,安裝完成。

  說道這裏,可能有些網友根本沒看上面文字,就說:普通用戶不需要知道這麼多,他們就需要知道怎麼用就行了。是的,話說回來了,這些人如果不用Windows,完全可以嘗試Ubuntu或者Fedora,這兩個發行版都可以雙擊安裝程序。但是缺點就是無法深度定製。

  我們暢想一下,如果QQ有tar.gz源碼版發佈,那麼我希望的安裝命令是:

cd qq2016/
./configure --without-ad --without-qqshow --without-popnews --without-qzone --with-ipaddress --with-showip
make;make install

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章