直到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
我想補充一下,如果你沒有這個明確的負載,但有崩潰,那麼儘早加上** libdl **的顯式負載,並且'try ... catch'這個異常。 –
刪除'System.loadLibrary(「dl」)',它開始工作正常 – user1318496