GCC編譯四階段

2021-09-06 17:08:14 字數 1825 閱讀 5183

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、將彙編生成的檔案與相應的庫(動態庫,靜態庫)進行鏈結(確定動態庫檔案的位置),生成可執行的二進位制檔案;

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設定

#在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命令中手動設定搜尋路徑:

#新增標頭檔案搜尋路徑

# gcc foo.c -i /home/xiaowp/include -o foo
#新增動態庫搜尋路徑

# gcc foo.c -l /home/xiaowp/lib -lfoo -o foo
#新增靜態庫搜尋路徑

# gcc foo.c -l /home/xiaowp/lib -static -lfoo -o foo

技術路徑的四階段

一階段,從0到1,萬事開頭難,一半人都倒在門外面,因為隔行如隔山,有共同的話語體系需要拋棄自己以前的思維慣勢,習慣於一種全新的體系,這需要內心足夠強烈的意願和外部的氛圍持續薰陶。二階段,從1到60,邁出了第一步還是外行,最後只有上階段的一半人擁有了正確的學習方法和能力,不僅如此,加上異於常人的堅持和...

Bete衝刺第四階段

web 昨晚搞得很晚,幫隊友搞定了git的問題,倉庫頓時乾淨多了,同時已經基本完成了基礎功能的介面 ios 匯入並使用了改善互動的第三方開源庫,修正路徑bug web 把伺服器的程式部署到阿里雲伺服器上是交給另一位隊員做的,因為之前為web開發怎麼讓他一起參與程式設計而苦惱。想來想去就讓他去研究部署...

iOS開發入門到精通四階段

分為四個階段,從ios開發入門基礎到ios ui設計再到ios高階專題,最後是ios專案實戰。是一套 ios開發從入門到到精通 的免費ios開發教程。第一階段 ios開發語言基礎 工欲善其事,必先利其器 本階段在講解ios開發語言之前,先來講述了ios開發環境的搭建,mac作業系統的使用,ios開發...