窺探C語言程式的編譯、連結
阿新 • • 發佈:2018-12-09
窺探C語言程式的編譯、連結
C語言程式從原始檔到生成可執行程式需要經過編譯器的預處理,彙編、編譯、連結。這裡簡化為編譯、連結兩個階段
編譯:對原始檔語法做檢查
連結:會查詢函式的具體實現
並把專案中所有相關的.o目標檔案、C語言函式庫合併在一起生成可執行檔案
我來編寫一個main.c
對main.c進行編譯,可以用clang或者gcc編譯器都可以
$gcc -c main.c
$clang -c main.c
一旦執行編譯你會發現,編譯通過了,編譯器只是提示一個警告
警告只是告訴main.c呼叫sum函式沒有函式宣告,那我們新增sum函式宣告再次編譯
perfect!編譯完美通過,生成目標檔案main.o
接著問題就來了,mian.c根本就沒有sum函式定義,怎麼就可以編譯通過呢? 編譯只是檢查語法,main.c中呼叫sum函式並且有函式宣告就沒有語法問題,編譯自然可以通過。
接下來你想生成可執行程式還差一步連結
的操作
$gcc main.o -o main
$clang main.o -o main
報錯是因為找不到main.c中的呼叫sum函式
的定義,連結失敗。 由此證明連結會查詢該檔案呼叫所有函式的定義
這次就完美了,可以編譯器、連結一起來
$gcc main.c -o main
$clang main.c -o main
編譯連結通過,輸出執行結果21