Linux編譯軟體過程

2021-08-20 03:42:59 字數 2845 閱讀 7247

一次性編譯

輸入的是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...