軟件是由程序語言寫成的。其中,有一類語言稱為‘腳本語言’,當您編寫完后就可以直接運行,典型代表有 Perl、Python 及 Tcl/Tk。這些語言帶有解釋器,用來在程序和系統之間做翻譯。
軟件是由程序語言寫成的。其中,有一類語言稱為‘腳本語言’,當您編寫完后就可以直接運行,典型代表有 Perl、Python 及 Tcl/Tk。這些語言帶有解釋器,用來在程序和系統之間做翻譯。
另外一類語言,如 C 和 C++, 需將寫好的程序先編譯成二進制代碼(‘binary’),然后才能運行。
自然,每種語言都有各自優缺點:解釋型的語言開發起來快;而二進制代碼則由于不需要解釋器,運行速度更快,也更適合大型的項目。
編譯過程是將人們可以閱讀的文本,即源代碼,翻譯成機器可讀的文件,也就是二進制代碼。所以編譯時,您需要的第一件法寶就是編譯器。在 Linux 中,‘gcc’用來編譯主要由 C 語言寫成的程序,而 C++ 是由‘g++’(即‘gcc-c++’)來編譯。
一些復雜的程序可能包含大量源代碼文件。為了簡化編譯過程,編譯指令經常被放在一個文件中,這就是‘Makefile’文件。要應用這個文件,您就需要‘make’程序?!甿ake’讀取(解析‘parse’)‘Makefile’文件,并給編譯器提供合適的參數。您可以通過編輯‘Makefile’文件,來改變這些參數(比如將編譯好的文件放在何處)。
寫程序時,開發員并不需要從零開始,可以用一些庫(‘library’),這些庫提供了許多常用的函數。開發員只要在源代碼文件中,給用到的某些庫或庫中的函數作適當鏈接(‘link’),然后,編譯好的二進制在運行時就會用到這些庫。
現在,如果您編譯程序,編譯器需要獲取程序用到的一些庫的源代碼文件,這些文件也被稱為頭文件(‘header file’),所以,您同時也要有這些文件。
由于您只是在編譯時才需要頭文件,所以有必要將庫的RPM包一分為二:一個含有程序運行時需要的文件,而另一個是編譯程序時需要的文件。這正是現在發行版的常用辦法:一個包是庫本身(‘runtime’version);另外一個,以‘-devel-’(‘development’開發)來標識,里面是頭文件。
所以,您同時也需要程序用到的庫的頭文件包。
您可能會問,如何才能知道程序需要哪些庫?最簡單的辦法是試著編譯源代碼。如果無法找到需要的庫,編譯過程將中止。
第二個辦法是直接看‘Makefile’文件。在這個文件頭部,以 LIBS =
開頭的那一行,列出的就是需要的庫。請注意,這些庫以縮寫的方式列出:比如,‘ -lX11’指的是文件名‘libX11.so’。用 locate libX11.so 可以檢查這個文件是否已安裝在您的系統中。
第三個辦法是‘configure’腳本,這個文件由程序員用‘autoconf’工具生成。該腳本運行時,將檢查所有需要的庫和函數在系統中是否都可用。如果無法滿足,將運行失敗,并且告訴您出錯原因。
lright"> section index
top
源代碼是以壓縮包的方式發布的,這是由于一般含有多個文件,而且對于文本文件的壓縮,效果顯著。
在 UNIX 中,壓縮包用到兩種程序:一種將多個文件歸到一個包中,另一種再負責壓縮。按照慣例,gzip壓縮包以‘tar.gz’或‘tgz’結尾,而bzip2壓縮的則以‘tar.bz2’或‘tbz2’結尾。這些包都通俗地稱為‘tarballs’。
要解開壓縮包,您可以用一些圖形包管理器,比如 KDE 中的‘Archiver’或 GNOME 的‘guiTAR’。在 KDE 和 GNOME 中,您只要在各自的文件管理器中,單擊(或雙擊)壓縮包,程序就會自動開啟。
在命令行下,您可以用
tar xzf archive 解開gzip的壓縮包,而
tar xjf archive 則解開bzip2包(舊版的 tar 要用‘y’代替‘j’)。
第一個參數‘x’用來解壓縮(‘extract’),如果是新建壓縮包,那您得用‘c’替換,只是列出壓縮包內容的話,用‘t’。第二個參數對應于用到的壓縮工具?!甪’告訴‘tar’將有一個文件名。另一個用得較多的參數是‘C’,表示將解開來的文件放到其他目錄,比如:
tar xzfC archive dir
單一的‘bzip2’、甚至是‘zip’,在 Linux 世界中較為少見,用bunzip2 archive 或 unzip archive 可以解開這些壓縮包(后者對自解壓縮的‘.exe’包也有效)。
大
多數源碼壓縮包都含有 README 和 INSTALL
文件,這些文件是作者寫的文檔說明,講的是如何編譯、注意事項等等。我并不沒有說一定要讀這些文件;-),除非 INSTALL
文件開頭有‘These are generic
instructions’,如果是這樣的話,作者可能是無法忍受‘autoconf’自動生成的文件,而用自己更加有效的說明來替換了。
與壓縮包中的其他文件一樣,您可以用顯示文本的程序,打開來閱讀。
下面列出的是編譯時需要的包,您可以用 rpm -q name 來查看這些包是否都已安裝。
如果您用的是單 CD 版的 Mandrake Linux,那可能會缺少其中的某些包,如果是這樣,您可以通過rpmfind.net來獲取 RPM 包。
有了這些庫,您就可以完成大多數編譯,而不會由于缺少某庫而出錯。
如果您要編譯 GNOME 或 KDE 下的程序,您會用到各自庫的‘-devel-’版本。對于 KDE,您還需要‘libqt-devel’。
關于庫的包名,這里兩個要注意的地方: