2013-06-05 83 views
1

我將一組靜態庫轉換爲共享庫,並且能夠成功創建共享庫。問題在於exe文件,因爲與靜態庫的鏈接可能在庫中有未解析的符號,但共享庫並不是這種情況。共享庫中的所有符號都應該解決。列出Solaris中共享庫的依賴關係

例子: PROG1調用了lib1.a調用LIB2.a 現在PROG1的make文件不需要有LIB2.a爲PROG1調用了lib1.a不會導致調用LIB2.a。所以一些LIB2.a LIB1.a中的符號可以保持不變。

轉換後 兩個LIB1.so和LIB2.so都必須包含在PROG1的makefile中。包括LIB2.so解決了LIB1.so的幾個聯繫問題,但是由於包含了LIB2.so而出現了新問題(因爲它可能取決於LIB3.so)

有沒有什麼方法可以找出所有的依賴共享庫的庫?
我試過使用ldd,但沒有打印任何東西。

如果我的分析錯誤,請讓我知道。

+0

LDD沒有依賴關係,和錯誤輸出什麼都沒顯示它必須至少依賴於libc。請爲您提到的所有三個庫添加ldd的輸出。 –

+0

紅寶石%1!-ltr libStorage.so lrwxrwxrwx 1個蘇達dvlpmnt 23年5月20日3時20 libStorage.so - > libStorage.so.1 紅寶石%1!-ltr libStorage.so.1 -rwxrwxr-X 1阿西克dvlpmnt 5705636 Jun 6 03:43 libStorage.so.1 ruby​​%ldd libStorage.so ruby​​% – user1758616

回答

0

這是一個稍微個人的意見,但我認爲你應該鏈接你的共享庫,以便你得到一個未解決的符號錯誤(與-z defs)。這意味着您可以獨立分類每個圖書館,並且在鏈接時不會發生任何令人不快的意外。

當然,如果你的庫是乾淨的,不含遞歸的依賴(這可能是反正壞事)這個只能和你是不是嘗試做動態加載在那裏你可以加載任何impl_1.soimpl_2.soimpl3_.so在運行時爲客戶端client.so提供代碼。但是,如果您擁有鏈接時間依賴關係,它就會運行良好。

事實上,如果你不這樣做,並且使用ld而不是cc進行鏈接,,你會得到相當多,你看到的 - 在鏈接時間