2015-10-20 111 views
1

直到Android 6,我們有一個應用程序的工作版本,它使用Qt Android編寫,從Nexus中的Android 6開始設備我們看到奇怪的錯誤dlopen失敗:找不到符號「__cxa_finalize」引用「/system/lib/libdl.so」

dlopen failed: cannot locate symbol "__cxa_finalize" referenced by "/system/lib/libdl.so"

和應用程序崩潰。

objdump -T ourlibrary.so 
... 
00000000  DF *UND* 00000000 __cxa_finalize 
... 

以鏈接libc.so,忍不住了,沒有它同樣的問題-lc標誌測試。

其他依賴庫,而建築:libgnustl_shared.so

是爲了騙取編譯器我們已經增加了

extern "C" int __cxa_finalize(void*); // { empty body somewhere in .cpp file } 

沒有幫助,可能有人點到這個問題? 注:這是完全正常工作,直到Android的6(棉花糖)

UPD1: API版本android-9,建築arm,QT的Android編譯armv5,工具鏈版本4.9

UPD2:一些其他的庫顯示的glibc版本

00000000 w DF *UND* 00000000 GLIBC_2.2.5 __cxa_finalize

回答

2

我看見runni同樣的錯誤我的申請。你有:

System.loadLibrary("dl"); 

位於你的代碼的地方?如果是這樣,我在6和< 6上運行代碼的做法是在嘗試加載庫時捕獲並忽略由6拋出的UnsatisfiedLinkError異常。

+0

我想補充一下,如果你沒有這個明確的負載,但有崩潰,那麼儘早加上** libdl **的顯式負載,並且'try ... catch'這個異常。 –

+0

刪除'System.loadLibrary(「dl」)',它開始工作正常 – user1318496

相關問題