編譯安裝軟體就那麼回事兒

imcn.me發表於2014-09-08

  編譯軟體

  ubuntu倉庫有著成千上萬的軟體,如果加上第三方的倉庫,你可以得到更多!然而,有些情況下,可能需要你通過原始碼來編譯安裝軟體(相關指導請移步Compiling Easy How To ):

  1、倉庫中的軟體包不可用;

  2、倉庫中的軟體包太舊了;

  3、倉庫中的軟體包,因某些原因導致程式的個別功能不可用;

  4、倉庫中的軟體包可能有些bug被所有者修復了;

  5、你想通過測試來幫助作者修復某些bug;

  6、或者只是你想從頭開始,試試手動編譯一個程式;

  環境

  你需要根據寫成相關程式的語言,來編譯軟體。被要求編譯的應用程式通常是由C和C++寫成的,在這種情況下,你需要安裝編譯器gcc,可以通過安裝build-essential軟體包來獲取。通常情況下,你需要下面的命令操作來實現:

sudo apt-get install build-essential

  為了能夠執行configure和autogen.sh檔案,需要更多的程式:

sudo apt-get install automake

  最後,需要CheckInstall安全的將程式裝載到你的系統中:

sudo apt-get install checkinstall

  如果程式是由java寫成的,那麼你還需要一個java run-time和compiler。你可以根據java頁的說明來安裝java。有時候需要一個基於構建工具ant的java,軟體包可以從ubuntu倉庫獲得:

sudo apt-get install gcj

  如果程式是由解釋語言寫成的,比如python和perl,那麼你僅僅需要一個解析器,這個是ubuntu預設安裝的,你可以直接執行程式,絕大多數情況下,你可以直接從ubuntu倉庫中安裝那些為了執行程式而必須的python和perl程式。更多解釋語言的情報請參考文章結尾!

  你真的需要編譯嗎?

  如果你編譯軟體只是因為軟體倉庫裡的不可用,那麼請在Ubuntu Package Search中搜尋軟體包!很多作者同時也製作了他們自己的PPA,它們也可以被新增到你的軟體源裡。許多作者製作的PPA源的地方是Launchpad ,你也可以通過命令列,使用下面的命令搜尋相關軟體的keyword(當然了,請使用實際術語代替keyword)!

apt-cache search <keyword>

  獲取源

  通常,原始碼包會以作者自己網站的某種形式來提供!通常的格式是tar.gz和tar.gz2或者zip。你可以使用檔案解壓縮工具,通過下面的命令來解壓他們:

tar -xvf file.tar.gz tar -xvf file.tar.bz2 unzip file.zip

  有時候,也需要使用CVS剪下邊緣程式碼,你可以通過sudo apt-get install cvs來安裝CVS。例如,檢索NetworkManager的原始碼,寫出下面的命令:

cvs -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login
cvs -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co NetworkManager

  如果你是從CVS安裝,請參閱文章最後的介紹。

  很多軟體包,可以使用Bazaar(sudo apt-get install bzr)從upstream獲取當前的程式碼,而無需手動查詢版本控制位置。例如:

bzr get lp:network-manager

  三步編譯

  絕大多數linux上需要原始碼安裝的程式可以通過./configure;make;make install這三步來實現安裝,而最困難的一步往往都在./configure這一步,那後面的幾步是可以很輕鬆的完成的。

  Configure

  configure是用來做下面這些事的一個指令碼:

  1、用以檢查計算機建立包所必須的完整性;

  2、幫助你根據需要改變預設的路徑;

  3、用以啟用/禁用編譯程式中的各種選項;

  4、用以改變程式將要被安裝的路徑;

  你可以通過執行下面的命令來檢視特定configure指令碼所提供的選項個功能:

./configure --help | less

  例如,預設的configure指令碼會指定安裝到/usr/local下面,如果你想改變路徑,可以執行下面顯示的configure指令碼命令:

./configure --PREFIX=/opt

  如果你真的想從零開始編譯,可以認真研讀一下README或者INSTALL檔案。你會看到需要什麼樣的軟體碎片,比起在包系統中,在這些檔案中他們通常有著不一樣的名字。接下來,可以通過使用apt-cache工具來尋找相應的包。如果你已經通過倉庫中編譯包,那麼還有一個訣竅,就是通過下面的命令來安裝包的依賴:

sudo apt-get build-dep <package>

  這可以確保所有所需的包以來都可以被安裝,以期configure不會由於過舊的依賴包而報錯,否則你將不得不繼續編譯相關的依賴。

  尋找並修復configure的故障

  恰巧在下面這幾種情況下,configure可能會失敗:

  1、編譯的時候需要-dev包;

  2、要編譯GNOME應用那麼需要相應的gnome-level;而編譯KDE應用則需要kde-level;

  3、C和C++庫的名稱總是以lib開頭,因此,如果./configure報錯說丟失了庫foo,那麼你需要安裝libfoo-dev包;

  4、如果configure說要“X includes”,那麼你可能需要安裝下面這些包“xlibs-dev,xlibs-static-dev,x-window-system-dev”,注意,有時候,僅僅需要xorg-dev和x-dev就可以了。-Racecar56 Under Jaunty則需要安裝xorg-dev和libx11-dev。

  5、檢視哪些包被需要的技巧,可以使用auto-apt工具或者apt-file工具(auto-apt可能更快一些):

sudo apt-get install auto-apt
sudo auto-apt update
auto-apt search missing-file.h

  使用auto-apt和上面是一樣的,如果把auto-apt替換成auto-apt!

  6、如果編譯軟體禁用失敗的選項,可以使用./configure –disable-FEATURE選項。

  7、如果你自己沒能修復你遇到的問題,你也可以尋求ubuntu官方的幫助哦。

  如果根本不存在configure的檔案,那麼最好檢視一下configure.ac檔案(有必要認真閱讀一下INSTALL和README檔案),如果configure.ac檔案存在,那就是開發者忘記建立最終configure檔案了,你可以自己建立,不過需要autoconf包:

sudo apt-get install autoconf

  安裝成功之後,鍵入:

autoconf

  如果幸運的話,一個可工作的configure檔案應該被建立了。

  編譯

  可喜可喝,configure步驟已經完成了,真正的編譯安裝可以開始了。非常簡單:

make

  現在如果一切順利的話,你應該的到了一個可工作的程式copy在你的源目錄下,你可以執行下面的命令來試用一下:

src/program_name

  如果程式這一步失敗了,那麼就有可能是程式的bug,這時候你最好聯絡一下作者,告訴他程式的問題。

  安裝軟體包

  如果一切進展順利的話,你可以鍵入下面的命令來安裝程式:

sudo checkinstall

  使用CheckInstall可以建立一個.deb包,這貨稍後可以很容易被移除哦!

  然而,由於某些原因,你不想使用CheckInstall,這是安裝的最後方法(不推薦):

sudo make install

  注意:

  1、如果程式是核心的一個元件,那麼還需要gcc-3.4(on breezy)和kernel-headers,他們稍後可以使用sudo apt-get install gcc-3.4 linux-headers-$(uname -r)來安裝。請注意,每核心升級後,那麼核心元件也必須重新編譯,而新的header也必須重新下載。要編譯完整核心,請參見KernelCompile

  2、如果你想重新編譯已經存在的debian的軟體包,可以使用dpkg-buildpackage -rfakeroot,如果個別包丟失了,build script會告訴你包的名字!

  3、如果你從revision control (CVS, Bazaar, 等.)進行編譯,通常需要獲取revision control的原始碼,之後增加一個步驟,執行autogen.sh指令碼,為你生成configure指令碼。

  解釋語言

  通常解釋語言在必須元件未安裝的情況下會執行失敗。

  1、perl組建通常類似於foo::bar(例如xml::parser),然而,它的包為稱為ibfoo-bar-perl(libxml-parser-perl),通過apt-cache搜尋可以幫助找到名稱稍許變化的檔案,例如:

apt-cache search foo | grep bar apt-cache search xml | grep parser

  2、python元件被稱作python-module,因此python mysql組建被稱作python-mysqldb,對映在這裡少有一致,apt-cache可以給一些幫助!像這樣搜尋一下:

apt-cache search python | grep mysql

  通常所需幫助文件在被要求安裝的元件當中!

  3、ruby元件的命名和perl有些類似,因為activesupport是libactivesuport-ruby[1.8|1.9](如果沒有特別要求,預設是1.8)。當然了,你也可以安裝ruby包管理平臺rubygems,然而,debian/ubuntu關閉了一些升級功能,確保rubygems可以使用apt正常工作。如果你想保持ruby的最新版本,可以看一下RubyOnRails

apt-cache search ruby | grep activesupport

  評論

  為了找到更好的技巧,你可以考慮在CompilingEasyHowTo獲取更加有好的幫助。而且,你會發現CheckInstall也是很有幫助的:

  1、checkinstall不是文件中描述的預設方法?有些人剛開始編譯的時候不喜歡使用checkinstall,有原因嗎?

  修改每一頁,我都是相當的謹慎,我希望大家都能同意!

  2、file-roller不能用來解壓檔案?沒有人必須要記住“-jxvf”!請介紹一些儘可能簡單的操作工具,高階使用者可以在數百萬的網路文件裡找到命令列的捷徑,“this”文件應該只提供明瞭的方法,這樣可以讓大家更注重其ubuntu來,而且也可以更容易的執行那些鮮為人知的軟體包!

  實際上,“tar xf file”已經足夠了,GNU tar已經可以自動探測並解壓縮它們了。如果使用者想要詳細的輸入資訊,則可以使用"tar xvf file"。要是shell中編譯的最後幾步在提供一個GUI步驟,可能導致更為嚴重的問題!

  這則指導說明是給開發者的還是使用者的?

  原文地址:點選瀏覽 轉自於IMCN

相關文章