Linux下靜態庫檔案和動態庫檔案的產生和使用__Linux
來源:互聯網
上載者:User
現有main.cpp, function.cpp, function.h
靜態庫檔案和動態庫檔案都必須基於.o檔案來產生。
1.靜態庫檔案(libxxx.a):
首碼必須為lib,尾碼必須為.a。
(1)產生:
ar -r libmyfunction.a function.o
將對function.o產生靜態庫檔案,檔案名稱必須為libxxx.a。
一個已產生的靜態庫檔案可以再擴充。當向一個靜態庫末尾追加新的.o時,需要再執行: runlib libxxx.a
(2)使用:
使用前需要先執行: runlib libxxx.a
來源程式可使用靜態庫 libmyfunction.a 中包含的函數或類,只需在編譯時間連結上靜態庫檔案:
g++ -o helloworld main.cpp -L. -l myfunction
其中-L是使用靜態或動態庫的標誌, 後面緊跟的.表示該靜態庫是在目前的目錄下。若該靜態庫在/usr/lib下則可執行: g++ -o helloworld main.cpp -L/usr/lib -l function。-l後的function不需要加lib首碼和.a尾碼,命令執行時會自動加上。
2.動態庫檔案(libxxx.so)
(1)產生:
在編譯function.cpp成function.o時就必須加上-fPIC選項,表示與記憶體無關:
g++ -fPIC -c function.cpp
然後再對function.o生存動態庫檔案:
g++ -shared -o libmyfunction.so function.o
其中-shared選項即是產生動態庫檔案的標誌,檔案名稱必須為libxxx.so。
但是此時產生的 libmyfunction.so是無法使用的,需要加入/usr/lib目錄中:
sudo mv libmyfunction.so /usr/lib
但是此時還是不能用,需要更新記錄了可使用的動態庫檔案的記錄檔案/etc/ld.so.cache,使用命令:
ldconfig
將自動進行更新。此後再編寫的函數就可使用該動態庫了。
(2)使用:
和靜態庫檔案的使用很類似:
g++ -o helloworld main.cpp -L. -l myfunction