Linux C 程式的編譯和鏈結 例子

2021-07-13 21:49:53 字數 1502 閱讀 4118

檔案內容

#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,形成程序,開始執行 使用實體地址 靜態可...