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
相關文章
- 靜態庫生成
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- cmake:生成靜態庫和動態庫
- [Linux]動靜態庫Linux
- Linux共享庫、靜態庫、動態庫詳解Linux
- linux下的靜態庫與動態庫Linux
- linux 動態庫 靜態庫 函式覆蓋Linux函式
- 簡述Linux下的靜態庫和動態庫Linux
- 靜態內部類 呼叫
- windows和linux gcc生成動態連結庫DLL和SO並用python呼叫WindowsLinuxGCPython
- Laravel 如何實現既能靜態呼叫,又能動態呼叫Laravel
- 靜態庫與動態庫
- 動靜態庫
- ios靜態庫和動態庫iOS
- 封裝動態庫dll與靜態庫lib(原理及簡單例項)封裝單例
- linux靜態ip 配置Linux
- ZBlogPHP怎麼生成偽靜態?PHP
- linux下靜態連結庫和動態連結庫的區別有哪些Linux
- iOS 靜態庫 與私有庫iOS
- linux下使用boost.python呼叫c++動態庫LinuxPythonC++
- Gridsome 生成靜態站點基礎
- 關於php生成靜態問題PHP
- mac/linux 新增靜態路由MacLinux路由
- Linux中配置靜態IPLinux
- C靜態庫的建立與使用--為什麼要引入靜態庫?
- clion 《cmake自定義靜態庫後,生成的exe無法執行》
- 靜態資源公共庫
- iOS的Framework靜態庫iOSFramework
- 動態連結庫與靜態連結庫
- iOS動態庫和靜態庫的運用iOS
- android下java的靜態庫和動態庫AndroidJava
- Linux下快速靜態編譯Qt以及Qt動態/靜態版本共存Linux編譯QT
- 【002】Linux配置靜態ip地址Linux
- Linux靜態Ip配置失敗Linux
- linux 靜態地址配置選項Linux
- 一、靜態庫和動態庫,Makefile專案管理專案管理
- 資料庫靜態脫敏資料庫
- CMake和靜態庫順序