• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 奇怪的 ios libprotobuf.dylib 导致崩溃

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:27:13 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在项目中编译了自己的 protobuf(在主目标中,而不是 lib),但我发现了一个由 libprotobuf.dylib 中的 protobuf 代码引起的崩溃(我猜这是 new 中新包含的 lib设备版本——我的是 ipad air)。

* thread #1: tid = 0x6598, 0x0027e96e TutorChat`void google::protobuf::internal::RepeatedPtrFieldBase:estroy<google::protobuf::RepeatedPtrField<google::protobuf::UninterpretedOption>::TypeHandler>(this=0x1567158c) + 66 at repeated_field.h:814, queue = 'com.apple.main-thread, stop reason = breakpoint 2.41
    frame #0: 0x0027e96e TutorChat`void google::protobuf::internal::RepeatedPtrFieldBase:estroy<google::protobuf::RepeatedPtrField<google::protobuf::UninterpretedOption>::TypeHandler>(this=0x1567158c) + 66 at repeated_field.h:814
    frame #1: 0x37f231f2 libprotobuf.dylib`google::protobuf::FileOptions::~FileOptions() + 38
    frame #2: 0x37f231be libprotobuf.dylib`google::protobuf::FileOptions::~FileOptions() + 10
    frame #3: 0x37f18764 libprotobuf.dylib`google::protobuf::FileDescriptorProto::~FileDescriptorProto() + 56
    frame #4: 0x37f11296 libprotobuf.dylib`google::protobuf::EncodedDescriptorDatabase::Add(void const*, int) + 206
    frame #5: 0x37ef13d0 libprotobuf.dylib`google::protobuf:escriptorPool::InternalAddGeneratedFile(void const*, int) + 76
    frame #6: 0x37f1696a libprotobuf.dylib`google::protobuf::protobuf_AddDesc_google_2fprotobuf_2fdescriptor_2eproto() + 146
    frame #7: 0x37f2a580 libprotobuf.dylib`_GLOBAL__I_a + 8
    frame #8: 0x2be0e5a0 dyld`ImageLoaderMachO::doModInitFunctions(ImageLoader:inkContext const&) + 176
    frame #9: 0x2be0e6b0 dyld`ImageLoaderMachO::doInitialization(ImageLoader:inkContext const&) + 20
    frame #10: 0x2be0bd36 dyld`ImageLoader::recursiveInitialization(ImageLoader:inkContext const&, unsigned int, ImageLoader::InitializerTimingList&) + 358
    frame #11: 0x2be0bcb8 dyld`ImageLoader::recursiveInitialization(ImageLoader:inkContext const&, unsigned int, ImageLoader::InitializerTimingList&) + 232
    frame #12: 0x2be0bb8c dyld`ImageLoader::runInitializers(ImageLoader:inkContext const&, ImageLoader::InitializerTimingList&) + 40
    frame #13: 0x2be05276 dyld`dyld::runInitializers(ImageLoader*) + 78
    frame #14: 0x2be092c2 dyld`dlopen + 1030
    frame #15: 0x381d978c libdyld.dylib`dlopen + 48
    frame #16: 0x2f863794 libGFXShared.dylib`gfxInitializeLibrary + 1056
    frame #17: 0x2f7940fc GLEngine`gliInitializeLibrary + 44
    frame #18: 0x2f856b60 OpenGLES`eagl_init + 436
    frame #19: 0x2f856792 OpenGLES`-[EAGLSharegroup initWithAPI:sharedWithCompute:] + 114
    frame #20: 0x2f855b7e OpenGLES`-[EAGLContext initWithAPI:properties:] + 242
    frame #21: 0x0179870e libglInterpose.dylib`EAGLContext_initWithAPIProperties(EAGLContext*, objc_selector*, unsigned int, NSDictionary*) + 74
    frame #22: 0x2f8559de OpenGLES`-[EAGLContext initWithAPI:sharedWithCompute:] + 142

我猜想内部库 ImageLoader 会根据需要加载 protobuf,这会覆盖我自己的符号。所以我想知道有什么办法可以让事情变得正确吗?



Best Answer-推荐答案


是的,较新设备(iPhone 5S 和显然是 iPad air)上的 ImageLoader 有自己的 Protocol Buffer 副本,这会导致符号冲突。

我通过编辑我的 google/protobuf/stubs/common.h 并在文件顶部附近插入以下行来解决这个问题:

#define google myapp

现在,我的 Google protobuf 实现副本使用命名空间“myapp”而不是“google”,因此符号不会与系统符号冲突。

关于ios - 奇怪的 ios libprotobuf.dylib 导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848118/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap