3

Android-NDK (Android の JNI) ですが、STL を使用して文字列を簡単に操作できるようにしようとしています。

次のコードは、実行時にクラッシュします。

    __android_log_print(ANDROID_LOG_DEBUG, "RMSDK:RMServices", "[%s]", "Converting");
    std::string str("mark");
    __android_log_print(ANDROID_LOG_DEBUG, "RMSDK:RMServices", "[%s]", str);

実行すると、次のスタックが出力されます。

DEBUG/RMSDK:RMServices(11786): [Converting]
INFO/DEBUG(31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
INFO/DEBUG(31): Build fingerprint: 'generic/sdk/generic/:2.2/FRF91/43546:eng/test-keys'
INFO/DEBUG(31): pid: 11786, tid: 11786  >>> br.com.iba <<<
INFO/DEBUG(31): signal 11 (SIGSEGV), fault addr deadbaad
INFO/DEBUG(31):  r0 00000000  r1 00000000  r2 00000027  r3 00000000
INFO/DEBUG(31):  r4 00000000  r5 deadbaad  r6 00001728  r7 4618bd80
INFO/DEBUG(31):  r8 00261938  r9 002a5df0  10 00000000  fp 00000000
INFO/DEBUG(31):  ip ffffffff  sp beb41880  lr afd154c5  pc afd11dc4  cpsr 40000030
INFO/DEBUG(31):          #00  pc 00011dc4  /system/lib/libc.so
INFO/DEBUG(31):          #01  lr afd154c5  /system/lib/libc.so
INFO/DEBUG(31): code around pc:
INFO/DEBUG(31): afd11da4 1c2bd00b 2d00682d e026d1fb 2b0068db 

ご覧のとおり、「[Converting]」が出力され、std::String の初期化でクラッシュします。

PS: 私の Application.MK (jni フォルダーの下) には、次の行があります。

APP_STL := gnustl_static
4

2 に答える 2

6

std::string を __android_log_print の "%s" フォーマッタに渡すことはできませんchar *。std::string を使用すると、次のc_str()ようになります。

std::string str("mark");
__android_log_print(ANDROID_LOG_DEBUG, "RMSDK:RMServices", "[%s]", str.c_str());
于 2011-05-21T17:22:24.237 に答える
0

おそらく2.1以前で実行していますか?あなたの問題のように聞こえる次の NDK のために修正されたバグがあります。関連する修正については、以下のリンクを参照してください。

https://review.source.android.com//#change,21309

于 2011-05-19T00:37:05.823 に答える