android - Android NDK中使用"UnsatisfiedLinkError"时出现"dynamic_cast"

标签 android c++ dynamic android-ndk dynamic-cast

我是 Android 开发的新手,我遇到了下一个问题: 当我使用使用 "dynamic_cast" 表达式的 C++ 代码时 - 在模拟器上启动我的应用程序时出现 "UnsatisfiedLinkError"。但是当我在没有它的情况下运行应用程序时 - 一切正常(我的意思是 LogCat 没有任何错误)

我尝试在 Android 2.3.3 上运行它。我用的是 android-ndk-r7b。

我的应用程序.mk:

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

我的 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)

使用动态转换的代码 fragment :

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

日志猫说:

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)

有人知道如何解决这个问题吗?

最佳答案

尝试将这些行包含到您的 Applications.mk 中:

APP_CPPFLAGS += -frtti 
APP_CPPFLAGS += -fexceptions

Java 中是否有标记为“ native ”的方法?

关于android - Android NDK中使用"UnsatisfiedLinkError"时出现"dynamic_cast",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881049/

相关文章:

android - 在 onProgressChanged 上更改搜索栏的颜色

android - 数据绑定(bind)错误:(421, 17)错误: variable xyzViewHand is already defined in method _internalCallbackOnClick(int,查看)

Java/Android 从字符串 WITH Value 调用方法

Android 多屏幕分辨率

android - 如何在 Google Drive 平板电脑应用程序或 Google+ 通知中创建滑动布局?

C++:如何在对象构造期间调用初始化列表之外的成员构造函数?

c++ - winapi - 如何正确使用 LayeredWindows

c++ - 二值图像数据上的 CImg

c# - C# 4.0 'dynamic' 关键字的优点和缺点?

c - 使用链接列表将文件中的单词读取到动态字符中