"UnsatisfiedLinkError" appears when "dynamic_cast" is used in Android NDK

I am new to Android development, and I am faced with the following problem: when I use C ++ code that uses dynamic_cast expressions - "UnsatisfiedLinkError" appears when I run my application on the emulator. But when I run the application without it, everything works fine (I mean without errors in LogCat)

I tried to run it on Android 2.3.3. I used android-ndk-r7b.

My Application.mk:

APP_OPTIM := debug APP_ABI := armeabi APP_STL := gnustl_static APP_MODULES := native_lab 

My Android.mk:

 LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := native_lab LOCAL_SRC_FILES := native.cpp enum_if.cpp torrent.cpp LOCAL_CPP_FEATURES := rtti exceptions LOCAL_LDLIBS := -llog -lz \ /home/l/android9_toolchain/arm-linux-androideabi/lib/libstdc++.a LOCAL_C_INCLUDES := $(LOCAL_PATH)/include include $(BUILD_SHARED_LIBRARY) 

Pieces of code that uses dynamic tide:

 namespace libtorrent { template <class T> T* alert_cast(alert* a) { return dynamic_cast<T*>(a); } } ..... using namespace libtorrent; if (torrent_finished_alert* p = alert_cast<torrent_finished_alert>(a)){} 

Cat magazine says:

 03-27 07:28:26.465: D/dalvikvm(404): Trying to load lib /data/data/com.example/lib/libnative_lab.so 0x405149b8 03-27 07:28:26.496: W/dalvikvm(404): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/example/Bt2Activity; 03-27 07:28:26.555: W/dalvikvm(404): Class init failed in newInstance call (Lcom/example/Bt2Activity;) 03-27 07:28:26.555: D/AndroidRuntime(404): Shutting down VM 03-27 07:28:26.575: W/dalvikvm(404): threadid=1: thread exiting with uncaught exception (group=0x40015560) 03-27 07:28:26.615: E/AndroidRuntime(404): FATAL EXCEPTION: main 03-27 07:28:26.615: E/AndroidRuntime(404): java.lang.ExceptionInInitializerError 03-27 07:28:26.615: E/AndroidRuntime(404): at java.lang.Class.newInstanceImpl(Native Method) 

Does anyone know how to solve this problem?

+4
source share
2 answers

Try including these lines in your Application.mk:

 APP_CPPFLAGS += -frtti APP_CPPFLAGS += -fexceptions 

Do you have any methods in Java marked as "native"?

+7
source

It is possible that there may be a bug in the emulator. If you can test the ur application without an emulator, everything will work fine. I think there is some kind of logical error in the emulator that creates this problem. when u calls alert_cast (a)) {} the torrent_finished_alert link that the UAR transmission is not tested on the emulator, and this code fragment should be encoded in the emulator, that is, in the dynamic translation operator.

0
source

Source: https://habr.com/ru/post/1403559/


All Articles