GCC學習筆記

2022-08-25 22:15:18 字數 2620 閱讀 1771

編譯流程

預編譯(preprocess)→編譯(compilation)→彙編(assembly)→鏈結(linking)

例項:1)相關檔案

2)源**

#include int

main()

3)預編譯

所謂預編譯,指包括巨集展開、#include/#ifdef等的引用處理。

可以使用下面的方法檢視預編譯後的**。

$ gcc -e main.c
下面是生成的編譯後**的一部分(原檔案比較長)

typedef unsigned char

__u_char;

typedef unsigned

short

int__u_short;

typedef unsigned

int__u_int;

typedef unsigned

long

int__u_long;

typedef signed

char

__int8_t;

typedef unsigned

char

__uint8_t;

typedef signed

short

int__int16_t;

typedef unsigned

short

int__uint16_t;

typedef signed

int__int32_t;

typedef unsigned

int__uint32_t;

typedef signed

long

int__int64_t;

typedef unsigned

long

int__uint64_t;

typedef

long

int__quad_t;

typedef unsigned

long

int__u_quad_t;

...extern file *popen (__const char *__command, __const char *__modes) ;

extern

int pclose (file *__stream);

extern

char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__));

extern

void flockfile (file *__stream) __attribute__ ((__nothrow__ , __leaf__));

extern

int ftrylockfile (file *__stream) __attribute__ ((__nothrow__ , __leaf__)) ;

extern

void funlockfile (file *__stream) __attribute__ ((__nothrow__ , __leaf__));

intmain()

由於檔案比較長,通過命令gcc -e main.c,會將預編譯的結果直接顯示在控制終端,無法檢視全部內容,

可以通過下面的命令,將結果重定向到新的檔案中。

$ gcc -e main.c > preprocess.c
4)編譯(俠義)

這裡的編譯是指將預編譯後的源**轉化成彙編**,可以通過下面的命令輸出轉化後的彙編**檔案。

$ gcc -s preprocess.c
轉化後的彙編**如下:

.file    "

preprocess.c

".section .rodata

.lc0:

.string

"hello world

".text

.globl main

.type main, @function

main:

.lfb0:

.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset

16.cfi_offset

6, -16

movq %rsp, %rbp

.cfi_def_cfa_register

6movl $.lc0, %edi

call

puts

movl $

1, %eax

popq %rbp

.cfi_def_cfa

7, 8

ret.cfi_endproc

.lfe0:

.size main, .-main

.ident

"gcc: (ubuntu/linaro 4.7.3-12ubuntu1) 4.7.3

".section .note.gnu-stack,

"",@progbits

gcc學習筆記

1 連線標頭檔案 gcc i usr openwim include fred.c 使用 i 標誌來包含儲存在子目錄或者非標準位置的中的標頭檔案。例如上邊語句指示編譯器不僅在標準位置,也在 usr openwim include 目錄中查詢程式 fred.c包含的標頭檔案。2 連線庫檔案 a 靜態庫...

gcc 學習筆記

gcc 編譯程式的過程 預處理 pre processing 編譯 compiling 彙編 assembling 鏈結 linking 選項名 作用 o 產生目標 i s o 可執行檔案等 c 通知gcc取消鏈結步驟,即編譯原始碼並在最後生成目標檔案 e 只執行c預編譯器 s 告訴編譯器產生組合語...

gcc學習筆記

預處理 gcc e hello.c o hello.i 輸出預處理後的檔案 編譯 gcc s hello.i o hello.s 輸出彙編結果 彙編 gcc c hello.s o hello.o 輸出二進位制檔案 鏈結 gcc hello.s o hello 輸出鏈結後的二進位制,沒有選項 wal...