Linux動態連結程式庫的應用學習

來源:互聯網
上載者:User

Linux系統下分為兩種類型的函數庫:

1. 靜態庫
靜態庫的連結工作是在程式編譯階段完成的。
每個需要調用該靜態庫的程式中都有一份該庫的拷貝,
所以靜態庫在程式中的絕對位置在編譯階段就確定下來了;
由於多個程式中同時有多份靜態庫的拷貝,所以增大了程式的大小。

2. 動態連結程式庫
動態連結程式庫在程式編譯階段不會被拷貝到程式中。
它是程式在運行階段需要調用庫時才去將函數庫連結到可執行程式中的。
由於它是動態載入的,所以它在程式中的絕對位置是不確定的;
但是函數庫內部的各個函數之間的相對位置是在編譯期間確定下來的。
動態連結程式庫需要作業系統的支援,幸運的是現在的作業系統基本上都支援動態連結程式庫。

由於是程式運行時根據需要即時的載入庫,
所以如果函數庫找不到或者函數庫中缺少某個庫函數都會造成程式執行錯誤。
對於動態連結程式庫來講,這樣的錯誤只能在程式運行時才能被發現。
如果是靜態庫,則這些錯誤可以在程式編譯階段被提早發現。

使用動態連結程式庫的好處有:
1. 真正的實現了函數庫和程式的分離,庫函數提供者不必關心程式的其它部分。
他們只需要提供可用的動態函數庫即可。

2. 讓程式的升級變得簡單
如果動態連結程式庫有改動,不必去編譯整個可執行程式,讓程式開發變得方便簡單。
使用者只需要編譯這個動態連結程式庫,然後將其copy到動態連結程式庫原本的存放位置,重新運行程式即可。

接下來就具體學習如何應用動態連結程式庫的這個特性,以方便程式開發。
具體步驟如下:
1. 確定所使用的函數庫所在的系統的位置,可以使用find命令進行尋找
sh-3.2# find / -name "libtest.so"

2. 將編譯好的.so檔案copy到對應的步驟1找到的位置,
sh-3.2# mount -o sync -t vfat /dev/sda1 /mnt/
其中參數-o帶sync參數用來指定該分區是以sync方式進行寫操作;
參數-t用來指定待mount的分區的檔案系統類型。

3. 重新運行這個程式,這時程式就是載入了新的動態連結程式庫運行了。

4. 使用ldd命令可以用來查看程式依賴於哪些動態連結程式庫
sh-# ldd ./test_main
        libc.so.6 => /lib/libc.so.6 (0x40113000)
        /lib/ld-linux.so.3 (0x40022000)
sh-#
關於ldd可以參考下面這篇文章,

如果程式很龐大,如何確認某個模組或某個函數是屬於哪一個動態連結程式庫(在一個很大系的統中是有可能的)?
假定函數位於某個動態連結程式庫中,則可以使用objdump將動態連結程式庫進行反組譯碼,然後在結果中尋找指定的函數,
sh-3.2# objdump -d ./libtest.so | grep function

使用readelf或nm都無法準確的定位函數處於哪個.so檔案中,
sh-3.2# readelf -s ./libtest.so | grep function
sh-3.2# nm ./libtest.so | grep function
原因是這個符號既會在函數所在的庫中查到,同時在調用這個函數的庫中也能查到。

控制Linux動態連結程式庫匯出函數

Ubuntu下的進行動態連結程式庫建立和使用的方法

Linux動態連結程式庫匯出函數

Linux下使用動態連結程式庫

Linux下面系統開發Makefile須知(動態連結程式庫的深入理解)

聯繫我們

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