MRB_THROW在libC++中导致错误abi.dylib

问题描述:

我在尝试构建ios-ruby-embedded项目的修改版本,其中包含mruby-mgems列表(其中包含.cpp文件)中的mruby-marshal gem。我可以得到它的建立和运行,但如果我提出任何异常的应用程序崩溃时,它从error.c以下消息调用MRB_THROWMRB_THROW在libC++中导致错误abi.dylib

libc++abi.dylib: terminating with uncaught exception of type int 

我怀疑问题出在mRuby异常是如何处理冲突正在编译和链接:根据文档,如果包含C++代码,它可以使用setjmp/longjmp处理或C++异常;但是,我无法弄清楚需要哪些配置选项组合才能使其正常工作。

为了得到它来建立我做了一些修改项目:

  • 添加conf.cxx部分在Rake文件每个目标(在conf.cc部分复制设置)
  • 添加“-lC++”标志,在我使用Xcode项目(从mruby-ios-example项目派生)
  • 在mruby名帅项目的其它链接器标记“,而不是使用的mruby-onig-regexp依赖性mruby-pure-regexp宝石

解决方案是将-fexceptions标志添加到C编译器标志列表中。我准备了一个gist与我用来修复此问题的Rakefile,请注意conf.cc标志。