2011-05-18 166 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