Linux 下使用 ar 工具(Windows 下vs使用lib.exe,將目標文件壓縮到一起,並且對其進行編號和索引,以便於查找和檢索),創建步驟如下圖所示:
Linux 下靜態庫命名規范, lib[your_library_name].a,其中lib為前綴,中間是靜態庫名,后綴名是 .a
1. 將源文件編譯成目標文件 .o (假設源文件為 Math.cpp)
g++ -c Math.cpp 執行此命令后,便會生成 Math.o 目標文件
2. 然后用 ar 工具將目標文件打包成 .a 靜態庫文件
ar -crv libmath.a Math.o 執行此命令后,便會生成 libmath.a 靜態庫
3. 使用該靜態庫
g++ test.cpp -L./ -lmath
-L:指定該靜態庫的路徑
-l:指定鏈接時需要的庫(編譯器在查找鏈接庫時,有隱含的命名規則,即在給出的名字前面加上 lib ,在后面加上 .a 或 .so 來確定庫的名稱,所以,我們只需要在-l后面加上 該靜態庫的名字就行)
其中,-L和-l后面可以沒有空格,有空格也是可以的
通過上面簡單的介紹,我們知道 靜態庫 可以達到代碼的復用,那為什么還引入動態庫呢?
靜態庫的缺陷:
(1)空間浪費
(2)靜態庫對程序的更新,部署和發布也會帶來麻煩,如果某個靜態庫更新了,所有使用它的應用程序都需要重新編譯,發布給用戶(對於玩家,只是一個很小的改動,卻導致整個程序重新下載,很麻煩)