• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 編譯源碼 第一篇

    發表于:2007-05-25來源:作者:點擊數: 標簽:一篇源碼編譯基礎軟件
    編譯基礎 軟件是由程序語言寫成的。其中,有一類語言稱為‘ 腳本語言 ’,當您編寫完后就可以直接運行,典型代表有 Perl、Python 及 Tcl/Tk。這些語言帶有解釋器,用來在程序和系統之間做翻譯。 編譯基礎 軟件是由程序語言寫成的。其中,有一類語言稱為‘腳

    * 編譯基礎

    軟件是由程序語言寫成的。其中,有一類語言稱為‘腳本語言’,當您編寫完后就可以直接運行,典型代表有 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 archiveunzip archive 可以解開這些壓縮包(后者對自解壓縮的‘.exe’包也有效)。

    * section index * top

    * ant">閱讀重要文件

    大 多數源碼壓縮包都含有 README 和 INSTALL 文件,這些文件是作者寫的文檔說明,講的是如何編譯、注意事項等等。我并不沒有說一定要讀這些文件;-),除非 INSTALL 文件開頭有‘These are generic instructions’,如果是這樣的話,作者可能是無法忍受‘autoconf’自動生成的文件,而用自己更加有效的說明來替換了。
    與壓縮包中的其他文件一樣,您可以用顯示文本的程序,打開來閱讀。

    * section index * top

    * 需要的包

    下面列出的是編譯時需要的包,您可以用 rpm -q name 來查看這些包是否都已安裝。
    如果您用的是單 CD 版的 Mandrake Linux,那可能會缺少其中的某些包,如果是這樣,您可以通過rpmfind.net來獲取 RPM 包。

    編譯器

    • gcc
    • glibc-devel
    • gcc-c++
    • libstdc++-devel

    有關系統

    • make
    • kernel-headers

    常用的庫

    有了這些庫,您就可以完成大多數編譯,而不會由于缺少某庫而出錯。

    • libgtk+-devel, libglib-devel 在部件設定(widget set)中常用
    • libgr-devel, libungif-devel, libjpeg-devel, libpng-devel, libtiff-devel, libxpm-devel 圖像格式
    • libtermcap-devel, libncurses-devel 用于控制臺程序
    • XFree86-devel 用于所有的圖形程序
    • zlib-devel 有關壓縮的庫

    如果您要編譯 GNOME 或 KDE 下的程序,您會用到各自庫的‘-devel-’版本。對于 KDE,您還需要‘libqt-devel’。

    關于庫的包名,這里兩個要注意的地方:

    1. 舊版 Mandrake Linux 中庫包名稱不會以‘lib’打頭,比如,‘libgtk+-devel’對應于‘gtk+-devel’。
    2. 一些庫的包可能在歸檔名中有版本號,比如,‘libpng-devel’現在的實際名稱是‘libpng3-devel’。當然,這個并不重要,我只是希望您不至于混淆 ;-) 。

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>