第一课 GCC入门
1序言
gcc是一個可移植的編譯器,支持多種硬件平臺;也不僅僅是一個本地編譯器也是一個跨平臺編譯器;支持多張語言編譯時按照模塊化設(shè)計支持多種語言。
gcc編譯過程:預(yù)處理(預(yù)處理器);編譯(編譯器);匯編(匯編器);鏈接(鏈接器);
gcc編譯簡化:參數(shù)ESc-->文件iso;
2實踐
先建立一個c文件hello.c,并輸入如下打印出"hello world!";
#include <stdio.h>int main(void) {printf("hello world!\n");return 0; }
2.1下面來記錄一下gcc編譯過程:
1>預(yù)處理階段? ? ??
gcc -E hello.c -o hello.i //使用-E參數(shù)表示編譯只到預(yù)處理階段,這個階段生成的文件是后綴為i,也可以在-E前面加上-Wall參數(shù)顯示編譯信息(以下如此),初學(xué)者非常有用。2>編譯階段
gcc -S hello.i -o hello.s //使用-S參數(shù)把預(yù)處理階段生成的文件編譯成匯編文件3>匯編階段
gcc -c hello.s -o hello.o //使用-c參數(shù)把匯編文件編譯生成目標(biāo)文件,這是二進(jìn)制文件? ? ? 4>鏈接階段
gcc hello.o -o hello //目標(biāo)文件鏈接生成可執(zhí)行文件不用參數(shù),此階段會把相關(guān)的一些系統(tǒng)靜態(tài)庫動態(tài)庫文件加入進(jìn)來生成可執(zhí)行文件以上4個步驟也可以使用一條命令完成:
gcc hello.c -o hello //直接把c源文件編譯成可執(zhí)行文件2.2gcc多文件編譯
上面的例子是針對一個源文件的,但是往往我們在開發(fā)中是多個文件那這又怎么操作呢,下面把上面的代碼拆分一下如下:
1.建立hello_fn.h文件,文件內(nèi)容如下:
#ifndef _HELLO_FN_H #define _HELLO_FN_H void print(const char* str); #endif2.建立hello_fn.c文件,內(nèi)容如下:
#include <stdio.h> #include "hello_fn.h"void print(const char* str) {printf(str); }3.建立hello_main.c文件,內(nèi)容如下;
#include "hello_fn.h"int main(void) {print("hello world!\n");return 0; }下面分步驟生成目標(biāo)文件在生成可執(zhí)行文件:
gcc -Wall -c hello_fn.c -o hello_fn.o gcc -Wall -c hello_main.c -o hello_main.o gcc -Wall hello_fn.o hello_main.o -o hello_main也可以一次性生成可執(zhí)行文件:
gcc -Wall hello_fn.c hello_main.c -o hello_main這樣結(jié)果是一樣,第一種方法適合多個目標(biāo)文件其中一個模塊發(fā)生變化此時只需要編譯改變的模塊最后在把所有的目標(biāo)文件鏈接成可執(zhí)行文件,現(xiàn)在假如hello_fn.c文件發(fā)生變化,只需要編譯hello_fn.c為目標(biāo)文件hello_fn.o,最后鏈接hello_main.o生成可執(zhí)行文件。
? ? ??
轉(zhuǎn)載于:https://www.cnblogs.com/luoliang/p/3843654.html
總結(jié)
- 上一篇: JSONObject,JSONArray
- 下一篇: apizza的使用方法