Linux 靜態庫生成及呼叫
- 靜態庫 Static library
- 靜態庫是obj檔案的一個集合,通常靜態庫以”.a”為字尾。
- 標準系統庫可在目錄/usr/lib與/lib中找到。比如,在類Unix系統中C語言的數序庫一般儲存為檔案/usr/lib/libm.a。該庫中函式的原型宣告在標頭檔案/usr/include/math.h中。
- C標準庫本身儲存為/usr/lib/libc.a,它包含ANS1/ISO標準指定的函式,比如printf。對每一個C程式來說,libc.a都預設被連結。
- 靜態庫的一個優點是開發者可以提供庫檔案給使用的人員,不用開放原始碼,這是庫函式提供者經常採用的手段。
$@
目標檔案$^
所有的依賴檔案$<
第一個依賴檔案- ar命令可以用來建立、修改庫,也可以從庫中提出單個模組。
- 庫是一單獨的檔案,裡面包含了按照特定的結構組織起來的其它的一些檔案(稱做此庫檔案的member)。原始檔案的內容、模式、時間戳、屬主、組等屬性都保留在庫檔案中。
1 編寫原始檔及makefile,生成靜態庫
編寫一個測試原始檔tom.c,再編寫makefile,make過程分為兩步, 第一步生成.o檔案,第二步通過ar生成靜態庫。
2 編寫介面檔案(xx.h)
為了讓使用者知道我們的動態庫中有哪些介面可用,我們需要編寫對應的標頭檔案。
3 連結動態庫生成可執行檔案
如果同一目錄下同時存在同名的動態庫和靜態庫,比如 libmax.so 和 libmax.a 都在當前路徑下,則gcc會優先連結動態庫。
建立一個使用tom_add函式的test.c,makefile中的gcc -o $@ $< -L ./ -ltom
生成a.out,其中-ltom
表示要連結libmax.a。-L.
表示搜尋要連結的庫檔案時包含當前路徑。
4 執行(無需指定動態庫位置)
直接執行 ./a.out 。
在嵌入式linux中使用動態庫(拿移遠CEFI舉例)
- 把makefile中的gcc更換成移遠的交叉編譯工具鏈arm-oe-linux-gnueabi-gcc
- openinit後make生成libtom.a
- 再make test生成a.out
- 將a.out拷入K18中,執行
./a.out
相關文章
- VS 環境下生成靜態lib庫及呼叫方法
- Linux 靜態庫生成指南Linux
- Linux下靜態庫生成指南Linux
- 靜態庫生成
- Linux 中的靜態庫和動態庫簡介及生成過程示例Linux
- .net呼叫靜態庫
- linux靜態庫的生成與使用(轉)Linux
- cmake:生成靜態庫和動態庫
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- Linux 依賴動態庫 / 靜態庫的動態態庫 / 靜態庫Linux
- linux下靜態庫、動態庫編譯及makefile書寫Linux編譯
- Linux 動態庫與靜態庫製作及使用詳解Linux
- Linux下靜態庫的生成以及使用例項圖解Linux圖解
- VS下生成與配置靜態庫與動態庫(一)
- Linux共享庫、靜態庫、動態庫詳解Linux
- linux下的靜態庫與動態庫Linux
- Linux下的共享庫(動態庫)和靜態庫Linux
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- 在Linux中建立靜態庫和動態庫Linux
- Linux下的靜態庫、動態庫和動態載入庫Linux
- 簡述Linux下的靜態庫和動態庫Linux
- Linux靜態庫和動態庫學習總結Linux
- Linux環境下建立靜態庫和動態庫Linux
- Laravel 如何實現既能靜態呼叫,又能動態呼叫Laravel
- ASP.NET偽靜態及靜態ASP.NET
- php生成靜態檔案PHP
- php 生成靜態頁面PHP
- PHP生成靜態頁面PHP
- PHP 中 static 靜態屬性和靜態方法的呼叫PHP
- linux成長之路(gcc編譯器、靜態庫、動態庫)LinuxGC編譯
- Linux下建立靜態庫、動態庫以及簡單的makefileLinux
- 利用hugo生成靜態站點Go
- ios靜態庫和動態庫iOS
- linux下生成動態連結庫Linux
- Asp.net實現靜態頁-新增新聞生成靜態頁ASP.NET
- 關於php生成靜態問題PHP
- 靜態庫與DLL
- 簡單C#生成靜態及相關讀取模板檔案C#