總結學習 頭文件 和 源文件 的關係以及存放

1.源碼到而二進制主要三階段:
預處理->編譯->鏈接
2.實際例子:
目錄結構如下圖所示

│  makefile
│
├─bin
│      main.exe
│
├─include
│      libtmp.h
│
├─lib
│      libtmp.dll
│
└─src
        main.c
        temp.c
        temp.h

.dll文件爲windows下的動態鏈接庫

僅預處理:gcc -E
僅轉爲彙編源碼:gcc -S
僅編譯:gcc -c
默認三步全做:gcc

預處理只分別處理每個文件
編譯期間僅考慮聲明的完整性
若編譯爲動態鏈接庫,那就還要求聲明對應定義的完整性
若編譯爲可執行文件,那就還要求有main
若編譯爲靜態鏈接庫,那就仍然只考慮聲明

工作目錄爲makefile所在目錄
main.c想要加入temp.h那麼

#include"./temp.h"

使用相對路徑

如果想要

#include<libtmp.h>

編譯使用

gcc -I./include 或者 gcc -Iinclude

上面“-”後面是大寫的i
大寫的I,大寫L,小寫l,大寫D,後面都緊隨一個用於此選項的參數,並且可以和這個參數之間不空格
用-I加入的是一個目錄,臨時添加頭文件查找目錄,優先級高於系統默認目錄

gcc -c 這個階段,鏈接還可以-L也可以類似的添加一個目錄,爲鏈接庫搜索目錄,優先級同樣高於系統目錄(靜態或者動態都算)
windows下動態庫libxxx.dll
unix下動態庫libxxx.so
windows/unix下靜態庫libxxx.a
windows下gcc -shared可以生成動態庫,比如:

gcc -shared -fPIC libxxx.dll tmp1.o tmp2.o tmp3.o

unix下ar 可以生成動態庫,比如:

ar -cqs libxxx.a tmp1.o tmp2.o tmp3.o

ar命令行參數依次爲:
選項 目標文件 源文件
使用的時候可以省略ib兩個字母,比如:
學習unp的時候,用到的編譯選項:

gcc xxx.c -o xxx -lunp

-lunp -lpthread
其實是-linunp -libpthread
後綴名.dll .so .a都需要省略
ps:libunp是我們下載源碼後,按照使用流程編譯的,libpthread是Unix自帶的
選項-lunp -lpthread均不跟路徑(已經添加到默認路徑了)
選項-L+路徑,手動臨時添加路徑,如目錄:
-Llib添加lib目錄
如果想使用libtmp.dll,就需要編譯的時候:

gcc -c src/main.c -o main.o -Iinlcude
gcc main.o -o bin/main.exe -Llib -ltmp 添加lib爲動態鏈接庫目錄,使用libtmp.dll
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章