5.11 庫的使用 代碼的復用是電腦程式設計語言中的一個重要的概念。可以把編譯好的目標文件模塊統一放到一個庫中,使得程式員可以在不同的程式中共用這些代碼。 在Linux操作系統下,最後連接生成可執行文件時,如果鏈接的是一般的.o文件,則整個文件的內容都會被裝入可執行文件中;如果鏈接的是庫,則只是從 ...
5.11 庫的使用
代碼的復用是電腦程式設計語言中的一個重要的概念。可以把編譯好的目標文件模塊統一放到一個庫中,使得程式員可以在不同的程式中共用這些代碼。
在Linux操作系統下,最後連接生成可執行文件時,如果鏈接的是一般的.o文件,則整個文件的內容都會被裝入可執行文件中;如果鏈接的是庫,則只是從庫中找到程式中用到的變數和函數,將它們裝入可執行文件中,那些在庫中沒有被程式所引用的變數和函數則不會被鏈接到最終的可執行文件。
所以,庫可以節省大量的開發時間。在寫較大程式時,最好把程式模塊放在庫中。
5.11.1 創建庫和維護庫
庫中所有文件都叫作庫的成員,可以時用以下格式來表示庫的成員:
庫名(成員名)
如:
mylib.a(mytest5_1.o)
用來表示庫mylib.a中的一個文件mytest5_1.o。 #.a為庫常用的擴展名
表示庫成員的另一個格式:
庫名((entry))
使用下麵格式來說明庫和成員的依賴關係:
庫名:庫名(成員名) 庫名(成員名) ...
另一種格式說明依賴關係:
庫名 .LIBRARY:成員名1 成員名2 ...
示例:維護一個名為mylib的庫,makefile文件格式如下:
mylib:mylib(test5_1.o) gcc -c test5_1.c ar -ruv mylib test5_1.o rm test5_1.o mylib:mylib(test2.o) gcc -c test2.c ar -ruv mylib test2.o rm test2.o
ar 命令的作用是從.o結尾的目標文件更新庫,格式如下:
ar -ruv 庫名 目標文件名
上面兩段代碼很相似,可以利用動態巨集合併不同的文件,代碼如下: