2015-10-20 1 views
1

До Android 6 у нас была рабочая версия приложения, которая была написана с использованием Qt Android, начиная с Android 6 в Nexus устройство мы видим странное заблуждениеdlopen failed: не удалось найти символ «__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 
... 

-lc протестирован с флагом, чтобы связать libc.so, не может помочь, без него того же проблемы.

другие зависимые библиотеки при строительстве: libgnustl_shared.so

для того, чтобы обмануть компилятор мы добавили

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

не помогло, может кто-нибудь точку в проблеме? Примечание: это не будет полностью работать до Android 6 (Зефир)

UPD1: апи версия android-9, архитектура arm, кварты андроид сборник armv5, Набор инструментов версия 4.9

UPD2: некоторые другие библиотеки показывают Glibc версия

00000000 w DF *UND* 00000000 GLIBC_2.2.5 __cxa_finalize

ответ

2

Я видел ту же ошибку, когда Runni мое приложение. У вас есть:

System.loadLibrary("dl"); 

Расположен в вашем коде где-нибудь? Если это так, то, что я сделал, чтобы мой код работал на 6 и < 6, заключался в том, чтобы поймать и игнорировать исключение UnsatisfiedLinkError, созданное при попытке загрузить библиотеку.

+0

Я бы добавил, если у вас нет этой явной загрузки, но у вас есть сбой, добавьте эту явную загрузку ** libdl ** достаточно рано и «попробуйте ... уловить» это исключение. –

+0

удалил 'System.loadLibrary (" dl ")' и начал работать нормально – user1318496

Смежные вопросы

 Смежные вопросы