歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux靜態庫和動態庫的編寫和使用

庫從本質上來說是一種可執行代碼的二進制格式,可以被載入內存中執行。庫分靜態庫和動態庫兩種。
1 靜態庫和動態庫的區別 1.1. 靜態函數庫 (1)靜態函數庫的名字一般是lib[name].a (2)利用靜態函數庫編譯成的文件比較大,因為整個函數庫的所有數據都會被整合進目標代碼中,它的優點是編譯後的執行程序不需要外部的函數庫支持,因為所有使用的函數都已經被編譯進去了。這給它帶來的缺點為如果靜態函數庫改變了,那麼你的程序必須重新編譯。 1.2. 動態函數庫 (1)動態函數庫的名字一般是lib[name].so (2)相對於靜態函數庫,動態函數庫所產生的可執行文件比較小,動態函數庫在編譯的時候 並沒有被編譯進目標代碼中,程序執行到相關函數時才調用該函數庫裡的相應函數,因此動態函數庫所產生的可執行文件比較小。由於函數庫沒有被整合進你的 程序,而是程序運行時動態的申請並調用,所以程序的運行環境中必須提供相應的庫。動態函數庫的改變並不影響你的程序,所以動態函數庫的升級比較方便。 (3)linux系統有幾個重要的目錄存放相應的函數庫,如/lib /usr/lib,/usr/local/lib。 2 編寫及使用靜態庫
靜態庫的制作所要用到的命令:gcc和ar 命令。
2.1 編寫靜態庫的步驟為: 2.1.1 創建編輯源代碼文件: pr1.c 和 pr2.c
pr1.c:
void print1()
{
printf(“This is the first lib src!\n”);
}
pr2.c
void print2()
{
printf(“This is the second src lib!\n”);
}
2.1.2 編譯.c 文件
gcc -O -c pr1.c pr2.c
2.1.3 鏈接靜態庫 在編譯程序中正確找到庫文件,靜態庫必須按照 lib[name].a 的規則命名,如下例中[name]=pr.
(1)ar -rsv libpr.a pr1.o pr2.o
a – pr1.o
a – pr2.o
(2) ar t ibpr.a
pr1.o
pr2.o
2.1.4 調用庫函數代碼 main.c
main.c
int main()
{
print1();
print2();
return 0;
}
2.1.5 編譯鏈接選項
-L 及-l 參數放在後面.其中-L 加載庫文件路徑,-l 指明庫文件名字.
gcc -o main main.c -L./ -lpr
2.1.6 執行目標程序
3 編寫動態庫 3.1 設計庫代碼
pr1.c : int p = 2;
void print() {
printf(“This is the first dll src!\n”);
}
3. 2 生成動態庫
gcc -O -fpic -shared -o dl.so pr1.c
4 動態庫的使用 4.1 動態庫的隱式調用
在編譯調用庫函數代碼時指明動態庫的位置及名字 main.c : int main()
{
print();
return 0;
}
gcc -o tdl main.c ./dl.so
當動態庫的位置或者名字發生改變時, 程序將無法正常運行; 而動態庫取代靜態庫的好處之一則是通過更新動態庫而隨時升級庫的內容.

相關鏈接:

Linux 動態庫的創建和使用 http://www.linuxidc.com/Linux/2013-03/81084.htm

Linux 靜態庫的創建和使用 http://www.linuxidc.com/Linux/2013-03/81083.htm

本文的更多詳情請繼續閱讀第2頁的精彩內容: http://www.linuxidc.com/Linux/2013-09/89876p2.htm

Copyright © Linux教程網 All Rights Reserved