000編程基礎----GCC程式編譯

來源:互聯網
上載者:User

標籤:使用   檔案   io   代碼   c++   c   

GNU C Compiler 多平台編譯器,是GNU的代表作之一。

GCC編譯器可以編譯連結C\C++\彙編成可執行檔,可執行檔沒特殊尾碼,看屬性。

預先處理 編譯 彙編 連結

Gcc通過尾碼來區分不同類型檔案

.c C語言原始碼檔案

.a庫檔案 由目標檔案構成的庫檔案

.C .cc .cxx C++原始碼檔案

.h 標頭檔

.i 已經預先處理過的C原始碼檔案

.ii 已經預先處理過的C++原始碼檔案

.o 編譯後的目標檔案

.s 組合語言原始碼檔案

.S 經過先行編譯的組合語言原始碼檔案

預先處理:把宏展開

-o 指定輸出的可執行檔的檔案名稱,如果沒有,則預設輸出檔案名字為:a.out。 gcc hello.c -o hello

-c 只編譯,不串連成為可執行檔,編譯器只是由輸入的.c等源檔案代碼,產生.o為尾碼的目標檔案。 gcc -c hello.c

-g產生調試工具(GNU的gdb)所必要的符號資訊,要想對編譯出的程式進行調試,就必須加入這個選項。 gcc -g hello.c -o hello

-O -O2:對程式進行最佳化,後面的最佳化程度更深。

gcc optimize.c -o optimize

time ./optimize

gcc -O optimize.c -o optimize

time ./optimize

對比兩種,最佳化後,明顯變好。

-Idirname:將dirname所指出的目錄加入到程式標頭檔目錄列表中。

C程式中的標頭檔包含兩種情況:

#include <A.h>

#include "B.h"

對於<>,預先處理程式cpp在系統預設的標頭檔目錄(/usr/include)中搜尋相應的檔案;

對於“”,cpp在目前的目錄中搜尋標頭檔。如果在目前的目錄中沒有找到需要的檔案,就到指定的dirname目錄中去尋找。

例如: gcc foo.c -I/home/include -o foo

-Ldirname:將dirname所指出的目錄加入到庫檔案的目錄列表中。在預設狀態下,串連程式ld在系統的預設路徑中(如/usr/lib)尋找所需要的庫檔案,這個選項告訴串連程式,首先到-L指定的目錄中去尋找,然後再到系統預設路徑中尋找。

-lname 在串連時,裝載名字為“libname.a”的函數庫,該函數庫位於系統預設的目錄或者由-L選項確定的目錄下。例如,-lm表示串連名為libm.a的數學函數庫。

例:gcc foo.c -L/home/lib -lfoo -o foo

-static :靜態串連庫檔案

預設是動態連結。

編譯選項:

-Wall :產生所有警告資訊

-w :   不產生任何警告

-DMACRO:-DYES:相當於在程式中使用#define YES

#include <stdio.h>

//#define YES

void main()

{

#ifdef YES

  printf("hello");

#endif

}

運行命令:

gcc -DYES hello.c -o hello

./hello

則,可以輸出hello。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.