2012-03-26 1 views
4

Je suis nouveau dans le développement pour Android et je face à problème suivant: quand je en utilisant le code C++ qui utilise « dynamic_cast » expressions - « UnsatisfiedLinkError » apparaît lorsque je démarre mon application sur un émulateur. Mais quand je cours l'application sans elle - tout fonctionne bien (je veux dire sans aucune erreur à LogCat)« UnsatisfiedLinkError » apparaît lorsque « dynamic_cast » est utilisé dans Android NDK

J'ai essayé de l'exécuter sur Android 2.3.3. J'ai utilisé android-ndk-r7b.

Mon Application.mk:

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

Mon 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) 

Les morceaux de code qui utilise cast dynamique:

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

chat journal dit:

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) 

Est-ce que quelqu'un sait comment résoudre ce problème?

+0

"UnsatisfiedLinkError" - y a-t-il plus de texte que l'erreur? Si oui, veuillez l'inclure dans la question. –

+0

J'ai ajouté trace d'erreurs de LogCat –

Répondre

7

Essayez d'inclure ces lignes dans votre Applications.mk:

APP_CPPFLAGS += -frtti 
APP_CPPFLAGS += -fexceptions 

Avez-vous des méthodes en Java marquées comme « natif »?

0

Il est tout à fait possible qu'il y ait un bogue dans l'émulateur. Si vous pouvez tester votre application sans l'émulateur, les choses fonctionneraient très bien. Je pense qu'il y a un bogue logique dans l'émulateur qui crée ce problème. comme quand vous appelez alert_cast (a)) {} la référence torrent_finished_alert que l'on passe n'est pas testable sur l'émulateur et ce morceau de code doit être codé dans l'émulateur, c'est-à-dire l'opérateur de cast dynamique.

+0

J'ai essayé de l'exécuter sur le périphérique réel, mais le résultat est le même –

Questions connexes