初識gcc編譯器

C在編譯過程分爲四個階段:

1.預處理:①:頭文件展開 ②:宏替換 ③:條件編譯;

頭文件 cd /usr/include/

   gcc -E demo.c>  demo.i[-E(只進行預處理) >(重定向) .i(預處理文件後綴名)]

  <stdio.h> 系統的頭文件目錄,找不到報錯。

  “stdio.h” 現在當前目錄中找,找不到再去系統頭文件目錄中找,找不到報錯。

  用戶自己定義的用“”  系統自帶的用<>。

2.編譯(進行語法檢查,詞法分析):gcc -c demo.c 在編譯階段停止  

3.彙編 gcc -s demo.c 在彙編階段停止  demo.s 彙編文件 。

4.鏈接 單個目標無法實現運轉,必須把demo.c文件和函數庫文件鏈接在一起纔可以。

 

gcc hello.c -o hello or gcc -o hello hello.c 給執行文件重命名

 

gcc -o1 .c -o 可執行文件優化文件

-o2

-o3

 

gcc -w hello.c -o hello 關閉警告

gcc -Wall hello.c -o hello 開啓警告

 

gcc 多個.c文件 -o 執行文件  編譯多個文件

gcc main.c add.c -o add -I../ 指定頭文件第三方搜索路徑

 

gcc main.c -I../ -D 外部宏定義

/lib/  /usr/lib

庫函數:保存變量和函數,可以使用變量和函數,但是看不到函數的定義和實現。

靜態庫(.a):是在程序執行之前就加入到執行代碼中,成爲執行程序的一部分執行。

1.(執行速度快)2.(編譯速度慢)3.(佔用內存多)4.(更新麻煩)5.(部署方便)

動態庫(.so):是在執行程序啓動時加載到執行代碼中。

 

靜態庫

gcc -c add.c  建立庫函數add.o

ar rcs libadd.a add.o

gcc main -ladd 指定庫  默認路徑/lib/  /usr/lib。

gcc main.c -ladd -L/root/1111 指定庫路徑

 

動態庫

gcc -shared -fPIC -o libadd.so add.c

gcc main.c /root/1111/libadd.so -o add

 

c語言自帶庫:libc.a  libc.so

     數學庫: libm.a  libm.so

發佈了37 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章