1

我有一个借助 cocos2d-x 引擎实现的 Android 应用程序。我将 protobuf 库链接到项目并尝试 SerializeToStrint() 一个原型对象:

ProtoMessage message;
message.set_app_id(1111);
message.set_hardware_id("test string");

std::string str;

message.SerializeToString(&str);

这很好,但是当我尝试启动应用程序 logcat 时,请给我发送下一个日志:

09-14 10:26:51.748 13009 13009 I DEBUG   : Build fingerprint: 
verizon/droid2we_vzw/cdma_droid2we:2.3.4/4.5.1_57_D2GA-59/120117:user/release-keys
09-14 10:26:51.748 13009 13009 I DEBUG   : pid: 12996, tid: 13008  >>> com.karmicapps <<<
09-14 10:26:51.748 13009 13009 I DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
09-14 10:26:51.748 13009 13009 I DEBUG   :  r0 00000027  r1 deadbaad  r2 a0000000  r3 00000000
09-14 10:26:51.748 13009 13009 I DEBUG   :  r4 00000001  r5 00000000  r6 81b15340  r7 0000a000
09-14 10:26:51.748 13009 13009 I DEBUG   :  r8 818d4ed1  r9 44df07c8  10 00100000  fp 00000001
09-14 10:26:51.748 13009 13009 I DEBUG   :  ip afd466c8  sp 45ac1df8  lr afd19239  pc afd15d08  cpsr 60000070
09-14 10:26:51.748 13009 13009 I DEBUG   :  d0  643a64696f72646e  d1  6472656767756265
09-14 10:26:51.748 13009 13009 I DEBUG   :  d2  0049002e00690045  d3  0066007200750047
09-14 10:26:51.748 13009 13009 I DEBUG   :  d4  0000000000000000  d5  0000000100000000
09-14 10:26:51.748 13009 13009 I DEBUG   :  d6  000000000000f760  d7  0000000000000000
09-14 10:26:51.748 13009 13009 I DEBUG   :  d8  0000000000000000  d9  0000000000000000
09-14 10:26:51.756 13009 13009 I DEBUG   :  d10 0000000000000000  d11 0000000000000000
09-14 10:26:51.756 13009 13009 I DEBUG   :  d12 0000000000000000  d13 0000000000000000
09-14 10:26:51.756 13009 13009 I DEBUG   :  d14 0000000000000000  d15 0000000000000000
09-14 10:26:51.756 13009 13009 I DEBUG   :  d16 3fdd938000000280  d17 3fdfffffffffe114
09-14 10:26:51.756 13009 13009 I DEBUG   :  d18 3fe0000000000000  d19 3fe0000000000f76
09-14 10:26:51.756 13009 13009 I DEBUG   :  d20 0000000000000000  d21 3f872e5c54a96637
09-14 10:26:51.756 13009 13009 I DEBUG   :  d22 3e21e7c5992989f4  d23 bda8fae9be8838d4
09-14 10:26:51.756 13009 13009 I DEBUG   :  d24 3fc74721cad6b0ed  d25 3fc39a09d078c69f
09-14 10:26:51.756 13009 13009 I DEBUG   :  d26 0000000000000000  d27 0000000000000000
09-14 10:26:51.756 13009 13009 I DEBUG   :  d28 0000000000000000  d29 0000000000000000
09-14 10:26:51.756 13009 13009 I DEBUG   :  d30 0000000000000000  d31 0000000000000000
09-14 10:26:51.756 13009 13009 I DEBUG   :  scr 20000012
09-14 10:26:51.756 13009 13009 I DEBUG   : 
09-14 10:26:51.803 13009 13009 I DEBUG   :          #00  pc 00015d08  /system/lib/libc.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #01  pc 00013674  /system/lib/libc.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #02  pc 0001453a  /system/lib/libc.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #03  pc 000a45ec  /data/data/com.example/lib/libprotobuf.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #04  pc 000a46d0  /data/data/com.example/lib/libprotobuf.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #05  pc 000445ac  /data/data/com.example/lib/libprotobuf.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #06  pc 000445f6  /data/data/com.example/lib/libprotobuf.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #07  pc 00044616  /data/data/com.example/lib/libprotobuf.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #08  pc 000d51f8  /data/data/com.example/lib/libpromowall.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #09  pc 000d4ee4  /data/data/com.example/lib/libpromowall.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #10  pc 0001194c  /system/lib/libc.so
09-14 10:26:51.803 13009 13009 I DEBUG   :          #11  pc 00011510  /system/lib/libc.so
09-14 10:26:51.803 13009 13009 I DEBUG   : 
09-14 10:26:51.803 13009 13009 I DEBUG   : code around pc:
09-14 10:26:51.803 13009 13009 I DEBUG   : afd15ce8 2c006824 e028d1fb b13368db c064f8df 
09-14 10:26:51.803 13009 13009 I DEBUG   : afd15cf8 44fc2401 4000f8cc 49124798 25002027 
09-14 10:26:51.803 13009 13009 I DEBUG   : afd15d08 f7f57008 2106ec72 edd6f7f6 460aa901 
09-14 10:26:51.803 13009 13009 I DEBUG   : afd15d18 f04f2006 95015380 95029303 e934f7f6 
09-14 10:26:51.803 13009 13009 I DEBUG   : afd15d28 462aa905 f7f62002 f7f5e940 2106ec5e 
09-14 10:26:51.803 13009 13009 I DEBUG   : 
09-14 10:26:51.803 13009 13009 I DEBUG   : code around lr:
09-14 10:26:51.803 13009 13009 I DEBUG   : afd19218 4a0e4b0d e92d447b 589c41f0 26004680 
09-14 10:26:51.803 13009 13009 I DEBUG   : afd19228 686768a5 f9b5e006 b113300c 47c04628 
09-14 10:26:51.803 13009 13009 I DEBUG   : afd19238 35544306 37fff117 6824d5f5 d1ef2c00 
09-14 10:26:51.811 13009 13009 I DEBUG   : afd19248 e8bd4630 bf0081f0 00028344 ffffff88 
09-14 10:26:51.811 13009 13009 I DEBUG   : afd19258 b086b570 f602fb01 9004460c a804a901 
09-14 10:26:51.811 13009 13009 I DEBUG   : 
09-14 10:26:51.811 13009 13009 I DEBUG   : stack:
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1db8  00000000  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dbc  00000000  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dc0  00000000  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dc4  00000000  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dc8  afd4276c  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dcc  afd42718  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dd0  00000000  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dd4  afd19239  /system/lib/libc.so
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dd8  00000001  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1ddc  45ac1e0c  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1de0  81b15340  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1de4  0000a000  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1de8  818d4ed1  /data/data/com.karmicapps/lib/libpromowall.so
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dec  afd1855b  /system/lib/libc.so
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1df0  df002777  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1df4  e3a070ad  
09-14 10:26:51.811 13009 13009 I DEBUG   : #00 45ac1df8  0000001b  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1dfc  0000000e  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e00  45ac1eac  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e04  002ddb2c  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e08  81b15340  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e0c  fffffbdf  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e10  818d4ed1  /data/data/com.karmicapps/lib/libpromowall.so
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e14  afd464b0  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e18  002ddb2c  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e1c  afd13679  /system/lib/libc.so
09-14 10:26:51.811 13009 13009 I DEBUG   : #01 45ac1e20  45ac1eac  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e24  002ddb2c  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e28  0000000e  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e2c  00000000  
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e30  818d4ed1  /data/data/com.karmicapps/lib/libpromowall.so
09-14 10:26:51.811 13009 13009 I DEBUG   :     45ac1e34  afd1453d  /system/lib/libc.so

请问有人能解释一下造成这种情况的原因吗?

更新 但是如果我以这种方式初始化字符串:

ProtoMessage message;
message.set_app_id(1111);
message.set_hardware_id("test string");

std::string str;
str = "test";

message.SerializeToString(&str);

一切正常,proto 序列化正常

更新我在下面添加了一个 add2line 结果

新的堆栈跟踪:

#00  pc 00016f20  /system/lib/libc.so
#01  pc 00014878  /system/lib/libc.so
#02  pc 00015756  /system/lib/libc.so
#03  pc 0018dd64  /data/data/com.example/lib/libprotobuf.so   ---- std::string::reserve(unsigned int) 
#04  pc 0018de60  /data/data/com.example/lib/libprotobuf.so   ---- std::string::append(unsigned int, char)
#05  pc 000eff6c  /data/data/com.example/lib/libprotobuf.so   ---- google::protobuf::STLStringResizeUninitialized(std::string*, unsigned int)
#06  pc 000f1c96  /data/data/com.example/lib/libprotobuf.so   ---- google::protobuf::internal::WireFormatLite::ReadString(google::protobuf::io::CodedInputStream*, std::string*)
#07  pc 001013b4  /data/data/com.example/lib/libpromowall.so  ---- google::protobuf::DescriptorBuilder::NewPlaceholderFile(std::string const&)

更新 和最烦人的问题我无法在没有字符串字段初始化的情况下解析原型对象。

//str - serializing protobuf object
RegistrationRequest request;
request.ParseFromString(str);

错误!当我在我的桌面机器上的测试应用程序中编译它时,一切都很好。但是如果我通过 cocos2d-x 脚本 (ndk.r7) 编译应用程序在移动设备上崩溃

4

1 回答 1

4

确保libprotobuf.solibpromowall.so使用相同的 STL 实现构建:stlport_sharedgnustl_shared

于 2012-09-19T03:48:31.357 回答