2013-03-20 60 views
18

我有一個libTest.so,它在某些設備上不會加載。 logcat絕對沒用。 使用arm-linux-androideabi-readelf.exe -d libTest.so我能夠看到libTest.so所需的所有必需庫。我把它們全部放入本地PC的同一個文件夾中。在android上的ldd相當於

如何找出哪些符號丟失以及在哪個庫中?我只有NDK的標準工具集(nm,readelf,objdump等)。哪個工具和我如何使用,以便它解析我的libTest.so和所有相關的庫,並告訴我哪個符號阻止我的lib在目標設備上加載。

回答

18

感謝android開發人員。我的功能請求已執行:) 現在我們有ndk-depends,這是一種允許排除依存關係的工具。

編輯:雖然它不會做全符號解析。例如。如果您針對Android-14構建並嘗試使用舊版Android中不存在的方法,那麼此工具將不會列出缺少的符號。這部分在ndk-depends中留作TODO。

0

你可以這樣做:

$ /lib/ld-linux.so.2 --list filename 

這是因爲LDD只是一個shell腳本,就像周圍的動態加載程序的包裝。動態加載器的名稱,即ld- {version} .so可能不同。

+2

的Android似乎使用'/系統/斌/ linker'而不是'/ lib目錄/ LD-linux.so'。無論如何,我無法讓鏈接器輸出任何東西 – 2013-11-14 18:40:10

+7

無論我使用什麼參數,我只是直接調用'/ system/bin/linker'時得到'Segmentation fault'! – markshep 2014-01-29 16:12:50

9

我剛碰到同樣的問題,不想安裝ndk,也沒有抓整個源代碼樹來找出一個exe文件需要什麼。

readelf --dynamic filename | grep NEEDED 

顯示elf二進制文件的動態庫。