• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Linux下C/C++學(xué)習(xí)1

                  在Linux 下面,如果要編譯一個C 語言源程序,我們要使用GNU 的gcc 編譯器。下面
            我們以一個實例來說明如何使用gcc 編譯器。假設(shè)我們有下面一個非常簡單的源程序
            (hello.c):
            int main(int argc,char **argv)
            {
            printf("Hello Linux\n");
            }
            要編譯這個程序,我們只要在命令行下執(zhí)行:
            gcc -o hello hello.c

            下面就詳細(xì)說一下gcc的編譯過程

            gcc由C語言源代碼文件生成可執(zhí)行文件的過程,一般來說分為四個階段:預(yù)處理(也稱預(yù)編譯Preprocessing)、編譯(compilation)、匯編(Assembly)和鏈接(linking)。這四個階段分別由gcc調(diào)用不同的程序來實現(xiàn)。
             


            • 預(yù)處理是調(diào)用cpp程序來實現(xiàn)的,預(yù)處理主要是對包含語句、宏定義等進行處理。
            • 編譯是調(diào)用cc來實現(xiàn)的,它是源文件變?yōu)楹缶Y為.o的目標(biāo)文件的過程。
            • 匯編過程是對匯編語言的操作,通過調(diào)用as來實現(xiàn),匯編同樣也生成目標(biāo)文件。
            • 鏈接是通過用ld來實現(xiàn)的。這是最為關(guān)鍵的步驟,在該階段,ld會將各程序的執(zhí)行代碼放置在程序的適合位置,同時,程序調(diào)用的庫函數(shù)也會以適當(dāng)?shù)姆椒ㄔO(shè)置調(diào)用接口。

                  gcc編譯時,如果在命令行沒有指定其他參數(shù),則gcc會完成編譯、鏈接的過程,然后在當(dāng)前目錄中生成一個名為a.out的可執(zhí)行文件。一般來說,linux并不依賴文件的后綴來識別文件是否為可執(zhí)行程序,其判斷文件是否可執(zhí)行依據(jù)的是文件的屬性。如果對于當(dāng)前用戶而言,文件有運行權(quán)限,則該文件為一個可執(zhí)行程序。
                  對于gcc而言,判斷文件的類型主要是依據(jù)文件的后綴名。所以,要使用gcc編譯代碼,正確使用文件后綴是保證編譯正確的前提。如果寫了一個C++代碼,卻使用了.c為后綴,gcc在編譯該文件時會將該文件按照C語言代碼來處理,一般會出錯。




                  一些gcc常用的文件后綴名:

            • c: C語言源代碼文件
            • a:由目標(biāo)文件構(gòu)成的檔案庫文件
            • .C、.cc 或.cxx:c++源代碼文件
            • h:頭文件
            • i:經(jīng)過預(yù)處理的C源代碼文件
            • ii:經(jīng)過預(yù)處理的C++源代碼文件
            • m:Objective-C源代碼文件
            • o:編譯后的目標(biāo)文件
            • s:匯編語言源代碼文件
            • S:經(jīng)過預(yù)編譯的匯編語言源代碼文件

              gcc hello.c編譯通過后,就可以簡單的使用a.out調(diào)用該程序,使用命令如下:./a.out
            • 注意:這里不能直接使用a.out來調(diào)用該程序,因為shell在尋找可執(zhí)行程序時,并不在當(dāng)前目錄中尋找,所以必須用“./”來顯示指定該文件的路徑是當(dāng)前目錄

            posted on 2012-03-19 11:08 Daywei 閱讀(452) 評論(0)  編輯 收藏 引用 所屬分類: Linux

            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章檔案

            牛人博客

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            亚洲国产一成人久久精品| 久久久国产精品亚洲一区| 国产精品gz久久久| 国产精品热久久毛片| 亚洲性久久久影院| 久久一日本道色综合久久| 99国产欧美精品久久久蜜芽| 精品久久人人做人人爽综合| 亚洲精品无码久久久久sm| 一本久久a久久精品综合夜夜| 亚洲欧美国产精品专区久久| 欧美丰满熟妇BBB久久久| 国产伊人久久| 久久久久国产精品| 亚洲欧美成人综合久久久| 丰满少妇人妻久久久久久4| 人妻无码中文久久久久专区| 久久久久综合国产欧美一区二区| 久久久久久久久无码精品亚洲日韩 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 伊人久久精品影院| 999久久久免费国产精品播放| 日韩人妻无码精品久久久不卡| 久久99精品久久久久久野外| 韩国免费A级毛片久久| 久久久www免费人成精品| 精品水蜜桃久久久久久久| 国产三级久久久精品麻豆三级| 囯产精品久久久久久久久蜜桃| 青青久久精品国产免费看| 99久久99久久| 97久久超碰成人精品网站| 久久久精品人妻一区二区三区蜜桃 | 欧美久久一级内射wwwwww.| 99久久精品免费观看国产| 久久精品国产亚洲综合色| 无码AV波多野结衣久久| 伊人久久大香线焦AV综合影院| 7777精品伊人久久久大香线蕉| 亚洲欧美成人久久综合中文网| 亚洲人AV永久一区二区三区久久|