1. 程式人生 > >窺探C語言程式的編譯、連結

窺探C語言程式的編譯、連結

窺探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