so庫建立,使用和依賴關係

2021-07-10 15:15:57 字數 1909 閱讀 9427

我對so庫的name的理解:

libtest.so libtest.so.1 libtest.so.1.1

libtest.so 用在gcc的編譯選項-ltest,在生成程式時會去尋找libtest.so

libtest.so.1.1 so庫的全名,包含major version and minor version

記錄so庫之間的依賴關係:

gcc:gcc (ubuntu 4.9.1-16ubuntu6) 4.9.1

linux:3.16.0-23-generic #31-ubuntu smp tue oct 21 18:00:35 utc 2014 i686 i686 i686 gnu/linux

描述: town引用libfamily.so, libfamily.so引用libman.so, libwoman.so, libman.so依賴libdog.so, libwoman.so依賴libcat.so

問題:1、makefile只執行了第乙個target,其他未執行

恍然間想起make預設只執行第乙個target,解決方法第乙個target為

all: one two tree

或者.phony: one two three

2、幾個so檔案編譯ok,但是編譯town使用,未引用family()?

readelf -d,檢視dynamic section,發現幾個so沒有引用關係,在未使用-soname時,也不會有soname entries,經過加上soname,問題依舊。

gcc -l. -lfamily -o town town.c 改為 gcc -o town town.c -l. -lfamily,發現ok,根據此把makefile修改後,make sucess!

結果:readelf -d town

dynamic section at offset 0xf0c contains 25 entries:

標記        型別                         名稱/值

0x00000001 (needed)                     共享庫:[libfamily.so]

0x00000001 (needed)                     共享庫:[libc.so.6]

readelf -d libfamily.so

dynamic section at offset 0xef4 contains 27 entries:

標記        型別                         名稱/值

0x00000001 (needed)                     共享庫:[libman.so]

0x00000001 (needed)                     共享庫:[libwoman.so]

0x00000001 (needed)                     共享庫:[libc.so.6]

0x0000000e (soname)                     library soname: [libfamily.so]

linux-gate.so.1 =>  (0xb7789000)

libfamily.so => ./libfamily.so (0xb7783000)

libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb75c1000)

libman.so => ./libman.so (0xb75bd000)

libwoman.so => ./libwoman.so (0xb75ba000)

/lib/ld-linux.so.2 (0xb778c000)

libdog.so => ./libdog.so (0xb75b7000)

libcat.so => ./libcat.so (0xb75b4000)

關聯關係和依賴關係

關聯 一種結構關係,表現為乙個物件能夠獲得另乙個物件的是類引用並呼叫他的服務。關聯 association 表示兩個類之間存在某種語義上的聯絡。例如,乙個人為一家公司工作,一家公司有許多辦公室。我們就認為人和公司 公司和辦公室之間存在某種語義上的聯絡。在分析設計的類圖模型中,則在對應人類和公司類 公...

修改so庫中的依賴名

以suitespares中的libcholmod.so.3.0.13,先使用命令readelf d libcholmod.so.3.0.13讀取其need庫如下 標記 型別 名稱 值 0x00000001 needed 共享庫 libm.so.6 0x00000001 needed 共享庫 liba...

關聯關係和依賴關係分辨

可以從以下兩個方面來分辨 從類的屬性是否增加的角度看 發生依賴關係的兩個類都不會增加屬性。其中的乙個類作為另乙個類的方法的引數或者返回值,或者是某個方法的變數而已。發生關聯關係的兩個類,其中的乙個類成為另乙個類的屬性,而屬性是一種更為緊密的耦合,更為長久的持有關係。從關係的生命週期來看 依賴關係是僅...