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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.