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指令中手動設定搜尋路徑:
#添加頭檔案搜尋路徑
#添加動态庫搜尋路徑
#添加靜态庫搜尋路徑