linux靜態庫的生成與使用(轉)
庫是一種軟體元件技術,庫裡面封裝了資料和函式。
庫的使用可以使程式模組化。
Windows系統包括靜態連結庫(.lib檔案)和動態連結庫(.dll檔案)。
Linux通常把庫檔案存放在/usr/lib或/lib目錄下。
Linux庫檔名由:字首lib、庫名和字尾3部分組成,其中動態連結庫以.so最為字尾,靜態連結庫通常以.a作為字尾。
在程式中使用使用靜態庫和動態庫時,他們載入的順序是不同的。
靜態庫的程式碼在編譯時就拷貝的應用程式中,這樣的優點是節省編譯時間。
動態連結庫時程式在開始執行後呼叫庫函式時才被載入。
靜態庫的建立和使用:
1、在一個標頭檔案種宣告靜態庫所匯出的函式。
2、在一個原始檔種實現靜態庫所匯出的函式。
3、編譯原始檔,生成可執行程式碼。
4、將可執行程式碼所在的目標檔案加入到某個靜態庫中,並將靜態庫拷貝到系統預設的存放庫檔案的目錄下。
下面通過一個例子來說明:mylib.h種存放的是靜態庫提供給使用者使用的函式的宣告,mylib.c實現了mylib.h種宣告的函式。
標頭檔案:mylib.h
#ifndef _MYLIB_H_ #define _MYLIB_H_ void weclome(void); void outString(const char *str); #endif
原始檔:mylib.c
#include "mylib.h" #include void welcome(void) { printf("welcome to libmylib\n"); } void outString(const char *str) { if(str != NULL) printf("%s\n", str); }
1>編譯mylib.c生成目標檔案:gcc -o mylib.o -c mylib.c
2>將目標檔案加入到靜態庫中:ar rcs libmylib.a mylib.o
3>將靜態庫copy到Linux的庫目錄(/usr/lib或者/lib)下:
cp libmylib.a /usr/lib/libmylib.a
編寫呼叫庫函式的測試程式test.c:
#include "mylib.h" #include int main(void) { printf("create and use library:\n"); welcome(); outString("it's successful\n"); return 0; }
4>使用靜態庫編譯:gcc -o test test.c -lmylib
這裡注意,編譯時無需帶上字首和字尾。
5>執行可執行程式test: ./test
create and use library: welcome to libmylib it's successful
在Linxu下,可以使用ar命令來建立和修改靜態庫。
這些在linux下man ar一下就可以得到引數,這裡說明幾個常用的
d:從庫中刪除成員檔案。
r:在庫中加入成員檔案,若存在,則替換。
c:建立一個庫。
s:無論ar命令是否修改了庫內容,都強制重新生成庫符號表。
其他的命令用時再man。
上面這五步是基本的使用,還有需要的話,就要深入的學習了。
相關文章
- Linux 靜態庫生成指南Linux
- LINUX庫的使用與生成(轉)Linux
- Linux 靜態庫生成及呼叫Linux
- Linux下靜態庫生成指南Linux
- 靜態庫生成
- VS下生成與配置靜態庫與動態庫(一)
- linux下的靜態庫與動態庫Linux
- Linux下靜態庫的生成以及使用例項圖解Linux圖解
- Linux 動態庫與靜態庫製作及使用詳解Linux
- Linux 動態庫生成與使用指南Linux
- Linux動態庫生成與使用指南Linux
- cmake:生成靜態庫和動態庫
- C靜態庫的建立與使用--為什麼要引入靜態庫?
- Linux 依賴動態庫 / 靜態庫的動態態庫 / 靜態庫Linux
- Linux 中的靜態庫和動態庫簡介及生成過程示例Linux
- 靜態庫與動態庫
- 靜態庫與DLL
- ios靜態庫與動態庫的區別iOS
- Linux下的共享庫(動態庫)和靜態庫Linux
- iOS 靜態庫 與私有庫iOS
- Linux下的靜態庫、動態庫和動態載入庫Linux
- 簡述Linux下的靜態庫和動態庫Linux
- Linux共享庫、靜態庫、動態庫詳解Linux
- Windows靜態庫和動態庫的建立和使用Windows
- 動態連結庫與靜態連結庫
- 菜鳥教程——iOS動態庫與靜態庫iOS
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- 在Linux中建立靜態庫和動態庫Linux
- LINUX系統中動態連結庫的建立與使用(轉)Linux
- ios 開發中 動態庫 與靜態庫的區別iOS
- Linux下建立靜態庫、動態庫以及簡單的makefileLinux
- C++靜態庫與動態庫深入研究C++
- Linux靜態庫和動態庫學習總結Linux
- Linux環境下建立靜態庫和動態庫Linux
- CE的使用及靜態地址與動態地址
- 動態庫的生成和使用(二)
- Linux下的靜態連結與動態連結Linux
- VBA靜態變數與常量(轉)變數