什麼是.so檔案

來源:互聯網
上載者:User

.so檔案是Linux下的程式函數庫,即編譯好的可以供其他程式使用的代碼和資料


linux下何謂.so檔案:1.
用過windows的同學應該都知道 .dll檔案吧, 這二者有什麼共通之處呢,其實 .so檔案就跟.dll檔案差不多.//

2.一般來說.so檔案就是常說的動態連結程式庫, 都是C或C++編譯出來的。與Java比較就是:它通常是用的Class檔案(位元組碼).//
3.Linux下的.so檔案時不能直接啟動並執行,一般來講,.so檔案稱為共用庫.//
4.那麼.so檔案是怎麼用的呢?
for example:(1)動態庫的編譯
這裡有一個標頭檔:so_test.h,三個.c檔案:test_a.c、test_b.c、test_c.c,我們將這幾個檔案編譯成一個動態庫:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 
(參考2:都是由C或C++編譯出來的)
(-shared
該選項指定產生動態串連庫(讓連接器產生T類型的匯出符號表,有時候也產生弱串連W類型的匯出符號),不用該標誌外部程式無法串連。相當於一個可執行檔)
(-fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯後的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正程式碼片段共用的目的。)
(2)動態庫的連結
這裡有個程式源檔案 test.c 與動態庫 libtest.so 連結產生執行檔案 test:
命令:$ gcc test.c -L. -ltest -o test
(註:測試是否動態串連,如果列出libtest.so,那麼應該是串連正常了)
(-L.:表示要串連的庫在目前的目錄中)
(-ltest:編譯器尋找動態串連庫時有隱含的命名規則,即在給出的名字前面加上lib,後面加上.so來確定庫的名稱)
命令:$ ldd test
(註:執行test,可以看到它是如何調用動態庫中的函數的。)

聯繫我們

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