一次性編譯
輸入的是c語言原始檔,通常為.c或者.c,它們一般帶有h之類的標頭檔案。這個階段主要處理原始檔中的#ifdef、#include和#define預處理命令。該階段會生成乙個中間檔案.i,此階段對於命令 #gcc -e hello.c -o hello.i
[root@localhost test]#cat hello.c
#include
int main()
經過預處裡後
[root@localhost test]#gcc -e hello.c -o hello.i
[root@localhost test]#cat hello.i |more# 1
"hello.c"# 1
""# 1""
# 1"/usr/include/stdc-predef.h"13
4# 1""
2# 1"hello.c"# 1
"/usr/include/stdio.h"13
4# 27"/usr/include/stdio.h"34
# 1"/usr/include/features.h"13
4......# 2
"hello.c"
2int main()
可知在預處理階段完成:
在編譯階段,輸入的是中間檔案.i,編譯後生成組合語言檔案.s。這個階段對應的gcc命令如下所示:#gcc -s hello.i -o hello.s
[root@localhost test]#gcc -s hello.i -o hello.s
[root@localhost test]#cat hello.s|more
.file
"hello.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 6
movl $.lc0, %edi
call puts
movl $0, %eax
由此可知:
在彙編階段,將輸入的彙編檔案.s轉換成二進位制機器**.o,這個階段對應的gcc命令如下所示:# gcc -c hello.s-o hello.o
[root@localhost test]#ll
total 40
-rw-r--r-- 1 root root 70 may 21
16:28 hello.c
-rw-r--r-- 1 root root 16870 may 21
16:36 hello.i
-rwxr-xr-x 1 root root 8512 may 21
16:51 hello.o #可執行檔案
-rw-r--r-- 1 root root 449 may 21
16:47 hello.s
[root@localhost test]#vim hello.o
3 ^@<
98>^c@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
^@^@^
@^@^
@^c^@^o^@ð^e@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^@
^@^@^c^@^p^@ð^e@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^c^@^q^@(^f@^
@^@ ^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^c^@^r^@^p
^n`^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^c^@^s^
@^x^n`^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^
@^@^c^
[root@localhost test]#./hello.o
hello,world!
可知此階段完成:
在鏈結階段,將輸入的二進位制機器**檔案*.o(與其他機器**檔案和庫檔案)匯集成乙個可執行的二進位制**檔案, 生成可執行檔案 # gcc hello.o -o hello
[root@localhost test]#gcc hello.o -o hello
將上述4個步驟合併為乙個步驟為如下一條gcc命令
[root@localhost test]#gcc hello.c -o hello
[root@localhost test]#./hello
hello,world!
linux編譯過程
預處理 preprocessing 編譯 compilation 彙編 assembly 鏈結 linking 二 過程詳述 預處理 首先對源 檔案test.c和相關標頭檔案,如stdio.h等被預編譯器編譯成乙個.i 檔案。作用 預處理的作用主要是讀入源 檢查包含預處理指令的語句和巨集定義,並對源...
linux核心編譯過程
檢視系統的版本 uname a linux u2 2.4.20 8 2 一 4月 8 20 04 05 cst 2006 i686 i686 i386 gnu linux 核心編譯 make dep 檢視關聯,確定依賴性 make clean 清除一些不必要的檔案 make bzimage 生成新核...
Linux核心編譯過程
一.核心源 準備 1.獲取核心源 a.可以找乙個移植好的核心源 2.拷貝核心源 包到宿主機 借助samba伺服器從windows複製核心原始碼包到linux宿主機共享目錄下。3.解壓核心源 包 tar xvzf linux x x.tgz 二.核心編譯步驟 1.切換為超級使用者 su 2.拷貝con...