Objective-C で Ruby 拡張機能をビルドしました。マクロ ベースの例外処理とセルフ ビルド エラー処理の代わりに @throw/@catch などを使用したいと考えています。
GCC に同梱されている GNU ランタイムを使用しています。
拡張機能を使用して Ruby アプリを実行すると、例外が発生するとすぐにコア ダンプが発生します。abort() は GNU Objective-C ランタイムに由来します (libobjc/exception.c:375):
void
objc_exception_throw (id value)
{
struct ObjcException *header = calloc (1, sizeof (*header));
header->base.exception_class = __objc_exception_class;
header->base.exception_cleanup = __objc_exception_cleanup;
header->value = value;
#ifdef SJLJ_EXCEPTIONS
_Unwind_SjLj_RaiseException (&header->base);
#else
_Unwind_RaiseException (&header->base);
#endif
/* Some sort of unwinding error. */
abort ();
}
でコンパイルしたので、呼び出されていると-fobjc-exceptions
思います。_Unwind_RaiseException
Ruby拡張機能でObjective-C例外を使用する方法はありますか?