2012-02-29 42 views
2

在Linux上,我在同一臺機器上構建了兩個二進制文件A和B.我把它們帶到安裝了稍舊的libstdC++的另一臺機器上。當我運行LDD二元一-v我得到這個:如何確定libstdC++依賴關係?

libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6 
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6 

當我運行LDD對二進制B等-v我得到這個:

libstdc++.so.6 (CXXABI_1.3) => /usr/lib64/libstdc++.so.6 
libstdc++.so.6 (GLIBCXX_3.4.15) => not found 
libstdc++.so.6 (GLIBCXX_3.4) => /usr/lib64/libstdc++.so.6 

注意未找到GLIBCXX_3.4.15的依賴。這很有意義,因爲安裝的libstdC++只支持GLIBCXX_3.4.10。

問題是:ldd通過什麼機制確定二進制B依賴於GLIBCXX_3.4.15?更重要的是,我如何確定哪些代碼導致了這種依賴關係?

回答

2

如果您在爲可執行文件nm,你會看到大量的符號,其中一些是不確定的(你可以告訴這些,因爲他們在第一欄爲空白,並在nm第二列有U的默認輸出。)

其中某些符號的後綴將爲@@whatever。這些後綴是這些符號的版本依賴關係,並且如果您在二進制文件B中查找@@GLIBCXX_3.4.15,則應該告訴您哪些特定符號導致您具有該版本依賴關係。

+0

非常酷!謝謝 – Skrymsli 2012-03-08 17:47:01