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