每個人遲早都要下載程序的源碼,然后試著編譯它。如果你是RedHat或Debian的忠實追隨者,你最終會發現一個程序不是太老就是太新,而去找已經編譯過的二進制代碼。壞的一方面是這些代碼可能無論你怎么做,它們永遠不能被正確的編譯記住,大多數的Linux程序最多只是beta測試版。好的一方面是在過去的五年中編譯沒有問題的程序正在增加,而且即使你不是程序員,你也可以“修復”那些不能正確編譯代碼。
下載以后,現在你的硬盤上應該有一個某種類型的壓縮包。首先,你必須把它解壓(uncompress),并把它解包(untar)到一個目錄。在習慣上,很多人都把它們放到這個目錄:/usr/src。這樣能把所有的東西都放在一個地方,你以后可以清除它們。使用這個目錄需要有root身份。如果一個用tar打包的文件是用gzip壓縮的,則Linux的tar程序可以同時把它解壓和解包。如果你的文件名叫做:filename.tar.gz,你可以到/usr/src目錄,然后鍵入:
tar -xzvf /{path to file}/{filename.tar.gz} [Enter]
這將會把這個文件解壓并解包。這里是幾個參數簡單的解釋:x -把文件解包z -把文件解壓v -顯示處理過程f -后面跟著你要處理的打包文件名如果你用netscape下載的這個文件,可能會看到錯誤。有時netscape會為你解壓這個文件。
因此,如果你象上面這樣untar它,你可能會看到這樣的信息:
gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error exit delayed from previous errors
試著執行上面的命令,但把z參數刪掉,就是這樣:tar -xvf /{path to file}/{filename.tar.gz} [Enter] 除了gzip,有些文件是用bzip2來壓縮的,因此這些文件看起來象這樣the-program.tar.bz2。z參數對這種文件不起作用。解開這種文件最簡單的方法就是bunzip2 the-program.tar.bz2。這樣將把使用下面命令解包出來的the-program.tar文件解開:
tar -xvf /{path to file}/{filename.tar.gz} [Enter]
解包以后:cd到剛才解包時創建的那個目錄里。用ls看看這個目錄里的文件。首先你應該讀讀README和INSTALL文件。如果你沒讀這些文件,不要想從別人那里得到幫助。這是RTFM這個縮寫在網上使用很廣泛的原因(RTFM是`Read The Fucking Manual'的縮寫。README和INSTALL文件將會告訴你如何編譯和安裝這個程序。
要編譯它,執行"make"命令。為了讓"make"可以開始編譯,必須有個叫Makefile的文件(你也可以通過在命令行上來寫入make的參數,但那不在本文的討論范圍只內)有通常三個方法開始編譯:simple,Imake和configure。
Simple編譯:如果你看到一個叫Makefile的文件--沒有叫Imake或configure的文件,那么你就使用這個方法來編譯。因為不能為你的計算機設置,所以用這種方法來編譯有很多問題。通常README和INSTALL文件會告訴你如何編輯某些文件來使它可以正常編譯。通常,你可以這樣做:
make [Enter] make install [Enter]
如果一切正常,那么你現在就可以運行這個程序了。
Imake: 如果ls這個目錄看到有Imake文件,并且沒有Makefile,那么你就使用這個方法。這是一個設置編譯的比較老的方法。基本上你要鍵入:
xmkmf [Enter] make [Enter] make install [Enter] Configure:
如果這個目錄中有個叫configure的文件,那就要用這個方法。這是編譯程序最簡單的方法,而且編譯成功率很高。本質上,它會檢查你的這個系統,來查看每一個可能的哭和支持文件來確保你可以編譯這個程序,然后根據這些正確的信息來創建Makefile文件。如下執行:
./configure [Enter] make [Enter] make install [Enter]
注意第一個命令前面的./。當你鍵入一個命令的時候,shell會在你的路徑里查找文件。它不從當前目錄開始查找,因此如果./(代表當前目錄)沒有在路徑里,雖然ls看的見這個文件,但是shell卻找不到。shell能執行make是因為它通常都在/usr/bin里,而/usr.bin在路徑里。要看路徑,如下執行:
echo $PATH [Enter]
如果出現錯誤:
不能編譯的最常見錯誤原因是找不到文件。幾乎所有的程序都靠有些程序,文件或庫的支持。如果它們找不到,程序就不能編譯。README/INSTALL文件應該告訴編譯這個程序所需要哪些文件,和這些文件的版本。注意:錯誤的版本會象根本沒有這個文件一樣讓你不能編譯。通常,你要知道是不是這個問題可以從編譯程序輸出結尾的錯誤信息中得知,這些信息將告訴你找不到什么文件。注意:有時你有這些文件,但是它們不在Makefile文件所指明的地方。使用linux的發布安裝程序,例如rpm,來檢查你是否丟失了某些文件。如果沒有這些文件的話,去找它,如果有,并且版本正確,檢查Makefile文件看看它要求這個文件放在什么地方。例如:moc文件在/usr/local/bin里,但是Makefile說:moc=/opt/bin/moc。編輯一下Makefile(用vi或者任何什么文本編輯器)然后改一下moc的路徑即可。
另一個常見的錯誤是丟掉了"include"的文件。很多程序的中的原文件的頭幾行是這樣的:
#include #include #include #include
這些"h"文件(或者叫頭文件)必須存在于你的計算機里。最少你應該有內核的頭文件,使用ls /usr/include/linux查看。如果你安裝了一些庫,象gtk,確定也安裝了它們的開發文件。有時同一個庫的幾個版本可能導致一些問題,每個版本可能把它的頭文件放在不同的地方,可你并不知道編譯的時候使用的到底是哪個文件。
如果你改變了Makefile中的所有應該改變的地方,并且所有的庫和頭文件都對,而它仍然不能編譯,那么順序如下做:
1、如果你是從一個和這個程序的主站不同的另外一個站點下載的這個程序,那么去它的主站看看有沒有更新的版本可以使用。
2、去dejanews.com這個站點,搜索一下這個程序。這里很可能有其他人遇到了同樣的問題,并且已經貼出來了解決方法。
3、如果所有的方法都不行的話,email給作者,很多作者對改進他們的程序以及bug報告和性能建議都很有興趣,通常都會被很好的接受(記注:這是linux,不是商業軟件)注意:你的bug報告最好多說些關鍵的情況,不要只說一句"這個程序不能編譯"!我通常是email過去編譯結果的最后十行或更多行,這樣作者才能看到是那里出現的錯誤。如果我真的喜歡這個程序,我會在下一個新版本發布以后盡可能給作者游泳的反饋。注意,程序員也是人--他們會有兩個星期的休假、跳槽、搬家等等其他十五,因此不要期望能夠立即得到回復。最后,有些程序有唯一的編譯設置:馬上能想到的有qt和內核,我再最后重復一遍:讀README和INSTALL文件。
新聞熱點
疑難解答