崩溃初始化std :: String

时间:2011-05-18 20:12:14

标签: android java-native-interface android-ndk android-stlport

虽然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

2 个答案:

答案 0 :(得分:5)

你不能将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());

答案 1 :(得分:0)

您是否可能在2.1或更高版本上运行?有一个错误已经修复为下一个NDK听起来像你的问题。请参阅以下链接以获取相关修复。

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