linux下檔案的字尾名只是為了方便程式設計師知道這是什麼型別的檔案,不用來識別檔案型別。
其中.so檔案(shared object)是動態庫(共享庫),相當於windows下的.dll
.a檔案是(archive)歸檔包(靜態庫),由多個.o檔案打包而來,相當於windows下的.lib
.o檔案是原始碼經過預處理、編譯、彙編後的檔案,只差鏈結。
編譯過程
源** -> 預處理 -> 編譯 -> 彙編 -> 鏈結 -> 目標**
.c/.cpp .i .s .o .so/.a/.out linux
g++ -e g++ -s g++ -c g++命令
靜態庫的命名規則和動態庫類似為 lib***.a 即 lib + 庫名 + .a
動態庫的優點是便於公升級庫,且所有程式只拷貝乙份動態庫,缺點是執行程式需要有相應的庫環境。
生成靜態庫
1.寫乙個***.cpp和***.h以及測試程式test.cpp
2.編譯***.cpp g++ ***.cpp -c -o ***.o
3.生成靜態庫 ar crv lib***.a ***.o (有多個.o檔案就加在後面)
4.編譯test.cpp並鏈結靜態庫 g++ test.cpp -l. -l*** -o test
Linux下靜態庫編譯
linux下動態庫檔案的擴充套件名為 so shared object 按照約定,所有動態庫檔名的形式是libname.so 可能在名字中加入版本號 這樣,執行緒函式庫被稱作libthread.so。靜態庫的檔名形式是libname.a。共享archive的檔名形式是libname.sa。共享arc...
Linux下的動態庫和靜態庫
靜態庫 程式編譯時載入,可執行程式體積大。一般命名為lib x.a。動態庫 程式執行時載入,可執行程式體積小。一般命名為lib x.so.1.3。x一般指庫名,如libxml2 tinyxml等 動態庫一般預設安裝在 lib 或者 usr lib 或者 usr local lib下。如果安裝的庫不在...
linux下的動態庫和靜態庫
1 使用gcc建立和使用靜態庫 1 gcc o mylib.o c mylib.c 生成o檔案 2 ar rcs libmylib.a mylib.o 生成a檔案 c create的意思 r replace的意思,表示當插入的模組名已經在庫中存在,則替換同名的模組。3 cp libmylib.a u...