1

cocos2d-x エンジンを使用して Android アプリケーションを実装しています。protobuf ライブラリをプロジェクトにリンクし、1 つのプロト オブジェクトを 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&)

UPDATE と最も厄介な問題は、文字列フィールドの初期化なしではプロト オブジェクトを解析できません。

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

エラー!デスクトップマシンのテストアプリケーションでそれをコンパイルすると、すべて問題ありません。しかし、cocos2d-x スクリプト (ndk.r7) を介してコンパイルすると、モバイル デバイスでアプリケーションがクラッシュします。

4

1 に答える 1

4

libprotobuf.solibpromowall.soが同じ STL 実装 ( stlport_sharedまたはgnustl_sharedのいずれか) でビルドされていることを確認してください。

于 2012-09-19T03:48:31.357 に答える