編譯安裝軟體就那麼回事兒
編譯軟體
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步驟,可能導致更為嚴重的問題!
這則指導說明是給開發者的還是使用者的?
相關文章
- 看了都知道繼承也就那麼回事兒繼承
- 機器學習其實就這麼回事兒!機器學習
- 在Ubuntu 18.04上編譯安裝pppoe客戶端軟體Ubuntu編譯客戶端
- 編譯安裝zabbix編譯
- 安裝編譯ffmpeg編譯
- Griffin編譯安裝編譯
- 編譯安裝nmon編譯
- swoole 編譯安裝編譯
- apache編譯安裝Apache編譯
- 自媒體+雲桌面是怎麼回事兒
- 龍芯麒麟原始碼編譯MySQL生成軟體包進行安裝原始碼編譯MySql
- ffmpeg安裝之linux編譯安裝Linux編譯
- httpd編譯安裝phphttpd編譯PHP
- Shell編譯安裝nginx編譯Nginx
- Linux 編譯安裝 PythonLinux編譯Python
- Linux編譯安裝NginxLinux編譯Nginx
- centos PHP 編譯安裝CentOSPHP編譯
- 開源編譯工具和編譯軟體編譯
- su軟體怎麼安裝
- 「譯」懂點那啥編譯編譯
- PHP Linux安裝擴充套件(編譯安裝)PHPLinux套件編譯
- 【MySQL安裝】Linux下安裝MySQL(預編譯)MySqlLinux編譯
- 反編譯之安裝Apktool編譯APK
- Xopsed的編譯與安裝編譯
- Linux 編譯 安裝 PHP 7.3.1Linux編譯PHP
- windows下編譯安裝thriftWindows編譯
- ubuntu編譯安裝pcl教程。Ubuntu編譯
- ubuntu編譯安裝kernel教程。Ubuntu編譯
- PHP7 編譯安裝PHP編譯
- CentOS 下編譯安裝 NginxCentOS編譯Nginx
- CentOS 下編譯安裝 apacheCentOS編譯Apache
- CentOS 6.4 編譯安裝 apacheCentOS編譯Apache
- 原始碼編譯安裝Redis原始碼編譯Redis
- macOS nginx 編譯安裝教程MacNginx編譯
- 如何在CentOS7安裝Node?(編譯安裝)CentOS編譯
- 軟體安裝
- 安裝軟體
- 電腦自動安裝軟體怎麼解決 怎麼禁止流氓軟體自動安裝
- Ubuntu安裝劃詞翻譯軟體Goldendict 單詞翻譯 句子翻譯UbuntuGo