libstd++
コードベースの簡単なgrep により、次の2つの使用法が明らかになりました__gx_personality_v0
。
libsupc ++ / unwind-cxx.h
// GNU C++ personality routine, Version 0.
extern "C" _Unwind_Reason_Code __gxx_personality_v0
(int, _Unwind_Action, _Unwind_Exception_Class,
struct _Unwind_Exception *, struct _Unwind_Context *);
libsupc ++ / eh_personality.cc内
#define PERSONALITY_FUNCTION __gxx_personality_v0
extern "C" _Unwind_Reason_Code
PERSONALITY_FUNCTION (int version,
_Unwind_Action actions,
_Unwind_Exception_Class exception_class,
struct _Unwind_Exception *ue_header,
struct _Unwind_Context *context)
{
// ... code to handle exceptions and stuff ...
}
(注:実際にはそれよりも少し複雑です。条件付きコンパイルがあり、一部の詳細が変更される場合があります)。
したがって、コードが実際に例外処理を使用していない限り、シンボルを定義してvoid*
も何も影響はありませんが、すぐにクラッシュします- __gxx_personality_v0
グローバルオブジェクトではなく関数なので、関数を呼び出すと、アドレス0にジャンプし、segfaultが発生します。
-fno-exceptions
。私CPPFLAGS += -fno-exceptions
はメイクファイルに追加し、それでエラーが解決しました。