linux動靜態連結庫問題__linux

來源:互聯網
上載者:User

1 linux動靜態庫是什麼。

把一些代碼產生為程式碼封裝,供其它程式調用,即是動靜態庫。動靜態庫都不是可執行檔,而是由源檔案編譯而成。

linux下,靜態函數庫(對應為.a檔案)、共用函數庫(動態庫,對應為.so檔案)。

.a檔案類似於windows的.lib檔案、.so檔案類似於windows的.dll檔案(Dynamic Link Library),中間編譯檔案.o檔案相當於windows裡的.obj檔案。


2 動靜態庫的區別

靜態庫和動態庫是兩種共用程式碼的方式,它們的區別是:

(1)靜態庫在程式的連結階段被複製到了目標程式碼中,程式運行時將不再需要該靜態庫;

(2)動態庫在連結階段,並不會被連結到目標程式碼中,而是程式在運行時由系統動態載入到記憶體中供程式調用,因此在程式運行時還需要動態庫的存在。

使用動態庫的優點是系統只需載入一次動態庫,不同的程式可以得到記憶體中相同的動態庫的副本,因此節省了很多記憶體。


3 庫的使用 

若庫名叫libsomething.a,連結的時候,加上編譯選項-lsomething。

例如:數學庫為libm.a,則加上編譯選項是-lm。

 

4 linux庫檔案的產生

(1)產生.so檔案:

$gcc test_a.c test_b.c -fPIC -shared -o libtest.so

$gcc test.c -L. -ltest -o test

-shared  指定產生動態連結程式庫

-fPIC      表示編譯為位置無關的代碼

-L.          表示要串連的庫在目前的目錄下

-ltest      編譯器尋找動態串連庫時有隱含的命名規則



.so檔案也是ELF格式的檔案。

$gcc -g -fPIC -c src.c -o libsrc.o

$gcc -g -shared-WI,-soname,libsrc.so -o libsrc.so libsrc.o -l<?

(2)產生.a檔案

$gcc -o fun.o fun.c

$ar -rc fun.a fun.o

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.