編譯流程
預編譯(preprocess)→編譯(compilation)→彙編(assembly)→鏈結(linking)
例項:1)相關檔案
2)源**
#include int3)預編譯main()
所謂預編譯,指包括巨集展開、#include/#ifdef等的引用處理。
可以使用下面的方法檢視預編譯後的**。
$ gcc -e main.c下面是生成的編譯後**的一部分(原檔案比較長)
typedef unsigned char由於檔案比較長,通過命令gcc -e main.c,會將預編譯的結果直接顯示在控制終端,無法檢視全部內容,__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 > preprocess.c4)編譯(俠義)
這裡的編譯是指將預編譯後的源**轉化成彙編**,可以通過下面的命令輸出轉化後的彙編**檔案。
$ 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...