檔案內容
#include
#include "fun.h"
int main()
檔案內容
#ifndef fun_h
#define fun_h
int calc(int a,int b);
#endif
檔案內容
#include"fun.h"
int calc(int a,int b)
在main.c檔案中包含了fun.h檔案,並呼叫了fun.h中定義的calc函式,calc函式的實現在calc.c檔案中。
上篇文章已經講過了如何一步步得到*.i、*.s、*.o檔案,這次我們不再一步步生成目標檔案(*.o),直接一步到位。
此時main.o檔案是不能生成可執行檔案的。
編譯器提示undefined reference to `calc』,因為我們沒有鏈結庫檔案。
1.首先,編譯fun.c得到fun.o目標檔案
2.然後,建立靜態庫檔案
3.在某些系統中,還要為靜態庫生成乙個內容表
ranlib libfun.a
4.庫檔案建立完成後,就可以鏈結了。
前面已經生成了main.o文和libfun.a檔案,現在我們鏈結一下,生成可執行檔案。
gcc main.o -o main.out -l. -l fun
注意一下這條語句的規則,-l表示指定庫檔案目錄,」.」表示當前資料夾,這裡也可以寫出目錄完整路徑。-l fun表示指定庫檔名,庫檔案的完整名是libfun.a,前面的lib和字尾.a均省略。
可見,main.out檔案已經生成,可以執行。
Linux C 編譯和鏈結
linux系統中最常用的編譯器是g 這是來自free software foundation的gun c 編譯器。linux的多數版本都包含該編譯器,但並不一定總會安裝它。g 編譯器的工作方式很像標準unix編譯器。例如,下面的命令將生成可執行檔案a.out g spiffy.cxxg spiffy...
程式的編譯和鏈結
一般來說,無論是c c 還是pas,首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file,這個動作叫做編譯 compile 然後再把大量的 object file合成執行檔案,這個動作叫作鏈結 link 編譯時,編譯器需要的是語法...
程式編譯和鏈結
程式進記憶體的一般過程 1 編譯compiler 編譯程式 將使用者源 編譯成若干個目標模組。2 鏈結link 鏈結程式 將形成的一組目標模組,及它們需要的庫函式鏈結在一起,形成乙個完整的裝入模組。3 裝入load 由裝入程式將裝入模組裝入記憶體,構造pcb,形成程序,開始執行 使用實體地址 靜態可...