2011-05-18 251 views
1

虽然Android-NDK(Android的JNI)我试图使用STL来使它更容易使用字符串。崩溃初始化std :: String

下面的代码,崩溃上执行:

__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

你不能传递的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()); 
0

你在2.1以上的老年人也许运行?有一个bug已经解决了下一个NDK听起来像你的问题。请参阅下面的链接以获取相关修补程序。

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

+0

这是2.2和NDK 5 – 2011-05-19 17:06:12