天天看點

GCC編譯四階段

  Linux下程式編譯的四個階段:預處理、編譯、彙編、連結

GCC: GUN  C Compiler 但現在不隻局限于c語言

預處理(Preprocessing):  gcc  -E  hello.c -o hello.i  -E選項意思不曉得

  1、在源程式中插入include包含的頭檔案;

  2、宏定義的替換

編譯(Compilation): gcc  -S  hello.i   -o  hello.s    -S選項意思也不曉得

  1、檢查代碼的規範性,文法錯誤等;

  2、把預處理的檔案編譯成彙編語言;

彙編(Assembly):   gcc -c   hello.s  -o hello.o    -c選項意思也不曉得

  1、将彙編語言彙編彙編成機器語言(二進制);

連結(Linking):   gcc   hello.o   -o hello

  1、将彙編生成的檔案與相應的庫(動态庫,靜态庫)進行連結(确定動态庫檔案的位置),生成可執行的二進制檔案;

gcc下的彙編器:as  連結器:gas

靜态庫連結時搜尋路徑順序:

1. ld會去找GCC指令中的參數-L

2. 再找gcc的環境變量LIBRARY_PATH(指令行中檢視:echo $LIBRARY_PATH )

3. 再找内定目錄 /lib 和 /usr/lib 和 /usr/local/lib 這是當初compile gcc時寫在程式内的

動态連結時、執行時搜尋路徑順序:

1. 編譯目标代碼時指定的動态庫搜尋路徑

2. 環境變量LD_LIBRARY_PATH指定的動态庫搜尋路徑(指令行中檢視:echo $LD_LIBRARY_PATH )

3. 配置檔案/etc/ld.so.conf中指定的動态庫搜尋路徑

4. 預設的動态庫搜尋路徑/lib

5. 預設的動态庫搜尋路徑/usr/lib

有關環境變量:在/etc/profile 或者 ~/.bash_profile設定

BRARY_PATH環境變量:指定程式靜态連結庫檔案搜尋路徑

LD_LIBRARY_PATH環境變量:指定程式動态連結庫檔案搜尋路徑

#在PATH中找到可執行檔案程式的路徑。

export PATH =$PATH:$HOME/bin

#gcc找到頭檔案的路徑

C_INCLUDE_PATH=/usr/include/libxml2:/MyLib

export C_INCLUDE_PATH

#g++找到頭檔案的路徑

CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib

export CPLUS_INCLUDE_PATH

#找到動态連結庫的路徑

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib 

export LD_LIBRARY_PATH

#找到靜态庫的路徑

LIBRARY_PATH=$LIBRARY_PATH:/MyLib

export LIBRARY_PATH

下面是在gcc指令中手動設定搜尋路徑:

#添加頭檔案搜尋路徑

#添加動态庫搜尋路徑

#添加靜态庫搜尋路徑

下一篇: c基礎總結

繼續閱讀