“UnsatisfiedLinkError” appears when “dynamic_cast” is used in Android NDK

孤街醉人 提交于 2019-12-10 09:35:09

问题


I am new in the developing for Android and I faced with next problem: when I using C++ code that uses "dynamic_cast" expressions - "UnsatisfiedLinkError" appears when I am starting my application on an emulator. But when I run application without it - all works OK( I mean without any errors to 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)

The pieces of code that uses dynamic cast:

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)){}

Log cat 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)

Do anybody know how to solve this problem?


回答1:


Try to include these lines into your Applications.mk:

APP_CPPFLAGS += -frtti 
APP_CPPFLAGS += -fexceptions

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




回答2:


It is quite possible that there might be a bug in the emulator.If u can test ur app without the emulator things would just work ot fine.I think there is some logical bug in the emulator that creates this problem.something like when u call alert_cast(a)){} the reference torrent_finished_alert that uare passing is not testable on the emulator and this piece of code has to coded in the emulator i.e. the dynamic cast operator.



来源:https://stackoverflow.com/questions/9881049/unsatisfiedlinkerror-appears-when-dynamic-cast-is-used-in-android-ndk

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!