Linux C語言程式設計環境之動態庫和靜態庫

2021-08-09 08:22:32 字數 1120 閱讀 1467

一、概念

本質上來說庫是一種可執行**的二進位制形式,可以被作業系統載入記憶體執行。由於windows和linux的本質不同,因此二者庫的二進位制是不相容的。

庫用於將相似函式打包在乙個單元中。然後這些單元就可為其他開發人員所共享,並因此有了模組化程式設計這種說法—即,從模組中構建程式。linux支援兩種型別的庫,每一種庫都有各自的優缺點。靜態庫包含在編譯時靜態繫結到乙個程式的函式。動態庫(也叫共享庫)則不同,它是在載入應用程式時被載入的,而且它與應用程式是在執行時繫結的。

1.靜態庫: 這類庫的名字一般是lib***.a;利用靜態函式庫編譯成的檔案比較大, 因為整個函式庫的所有資料都被整合進目標**中,他的優點就顯而易見 了,即編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進可執行檔案了。當然這也會稱為它的缺點 ,因為如果靜態函式庫改變了,那麼你的程式必須重新編譯,而且體積也較大。

2.動態庫:這類庫的名字一般是lib***.so,動態庫又稱共享庫; 相對於靜態函式庫,動態函式庫在編譯的時候並沒有被編譯進目標**中 ,你的程式執行到 相關函式時才呼叫函式庫里的相應函式,因此動態函式庫所產生的可執行檔案比較小。由於函式庫沒有被整合進你的程式,而是程式執行時動態申請並呼叫,所以程式的執行環境中必須提供相應的庫。動態函式庫的改變並不影響你 的程式,所以動態函式庫的公升級比較方便。而且如果多個應用程式都要使用同一函式庫,動態庫就非常 適合,可以減少應用程式的體積。

動態庫和靜態庫直觀**

二、製作方法

1.靜態庫製作:

gcc -c file1.c

gcc -c file2.c

…. gcc -c filen.c

ar -rcs libname.a(生成的靜態庫名稱) file1.o file2.o … filen.o

即將所有所需的函式逐個編譯,最後用 ar命令合成靜態庫。

2.動態庫製作:

gcc -shared -fpic -o libname.so(生成的動態庫名稱) file1.c file2.c … filen.c

-fpic:產生**位置無關**

-shared :生成共享庫

linux C 程式設計環境

gcc 中文手冊 gnu make 指南 autoconf 2.57手冊 英文 autoconf 2.13手冊 使用 automake 使用cvs進行版本管理 cvs用後感 linux下常用除錯工具 非常好的gdb教程,強烈推薦 gdb英文文件 gdb基本用法 gdb的官方文件 linux程式設計基...

linux C 程式設計環境

gcc 中文手冊 gnu make 指南 autoconf 2.57手冊 英文 autoconf 2.13手冊 使用 automake 使用cvs進行版本管理 cvs用後感 linux下常用除錯工具 非常好的gdb教程,強烈推薦 gdb英文文件 gdb基本用法 gdb的官方文件 linux程式設計基...

LinuxC(環境變數 動態庫)

path就是乙個環境變數,存放的是一些系統或者軟體的路徑,在path中新增過路徑的應用程式,可以直接使用檔名進行呼叫。1 windows 系統的配置 我的電腦 右鍵,選擇屬性 高階 環境變數 系統變數path 在原來的path後加分號 加具體的路徑。2 linux系統環境變數 export path...