Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android so 庫加載符號找不到的問題解決

Android so 庫加載符號找不到的問題解決

編輯:關於Android編程

錯誤信息

Trying to load lib /data/data/com.sohu.inputmethod.sogou/files/.dict/sogouime 0x414e83e8

D/dalvikvm(536): Shared lib '/data/data/com.sohu.inputmethod.sogou/files/.dict/sogouime',handle is null :1

E/dalvikvm(536): fail detail:Cannot load library: reloc_library[1306]: 104 cannot locate '_ZN7android7String8C1EPKtj'..

 

遇到這種情況就是在依賴so庫中沒有查找到“_ZN7android7String8C1EPKtj'”這個符號

1.正向查找

這裡的依賴庫是libutils.so,通過下面命令查找

objdump -tT libutils .so | grep ZN7android7String8C1EPKtj'

通過查找,確實是不存在這個符號。

2. 逆向查找問題

1 > 查找以前的so庫發現

objdump -tT libutils .so | grep ZN7android7String8C1EPKtj

 

 

android so 加載問題 - 寧靜致遠 - 寧靜致遠的博客

能過找到符合

2 > 通過地址找對應的函數名

nm –C –D libutils.so |grep 001c0f1

 

android so 加載問題 - 寧靜致遠 - 寧靜致遠的博客

 

這樣我們查找到對應的函數名

3 > 有問題的so庫中查找對應的函數名

nm –C –D libutils.so |grep android::String8::String8

 

android so 加載問題 - 寧靜致遠 - 寧靜致遠的博客

 

發現不能夠查找到String8::String8(unsigned short const*,unsigned int)

但是能夠查找到String8::String8(char16_t const*,unsigned int),通過分析char16_t的原始類型就是unsigned short ,但是這裡卻沒有編譯成原始類型。

查看最新的C++標准(ISO C++11)的主要變動 新增關鍵字:char16_t、char32_t,.......

也就是說出錯的libutis庫中的libutils.so庫是用按照最新的C++標准編譯的,

自此問題的原因找到了

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved